将外部变量传递给promise。然后不调用它

时间:2017-07-28 00:53:42

标签: javascript es6-promise

我有一系列承诺功能,我正在联系在一起。我不需要上一个函数的具体结果,所以我没有在resolve()中添加任何内容;我只需要它们按顺序运行。

但是,我希望将包含范围中的变量传递给第一个和第四个(最后一个)承诺。当我将它作为参数添加到第三个promise时,该函数立即运行。

如何将参数传递给链式承诺,而不是在那时调用函数/ promise?

以下是我正在尝试做的基础知识:

const containingFunction = function() {
        const varToPass = document.querySelector("#ID").value.trim();
        firstPromise(varToPass)
            .then(secondPromise)
            .then(thirdPromise)
            .then(fourthPromise(varToPass))
            .catch(e =>{
               console.error(e)); 
            } );
    };

FourthPromise:

    const fourthPromise = function(varPassed) {
            return new Promise(function(resolve, reject) {
                do some stuff but only after the thirdPromise has been resolved
                console.log(varPassed)
                resolve();
            });
        };

2 个答案:

答案 0 :(得分:2)

根据您要解决的问题varToPass,您有两种可能性。

LAMBDA

使用@Jaromanda X描述的lambda函数(没有自己作用域的匿名函数):

() => return fourthPromise(varToPass)

这将导致函数保持对变量的引用而不是其值。一旦触发第四个促销,就会评估varToPass的值,而不是在运行此代码时。{/ p>

包装

第二个选项是使用包装器,即返回函数的函数:

function fourthPromise(varToPass) {
    return function() {
        return new Promise(function(resolve, reject) {
            do some stuff but only after the thirdPromise has been resolved
            console.log(varToPass)
            resolve();
        });
    };
}

在这种情况下,传递的变量的值在此代码运行时计算,而不是在调用回调时计算。

哪种选择更适用于您的案例,但我们无法在没有更多背景的情况下告诉您。

答案 1 :(得分:1)

非常简单的改变

const containingFunction = function() {
    const varToPass = document.querySelector("#ID").value.trim();
    firstPromise(varToPass)
        .then(secondPromise)
        .then(thirdPromise)
        .then(() => fourthPromise(varToPass))
        .catch(e =>{
           console.error(e)); 
        } );
};