var a = [0,1,2,3];
如何将 getVal 的值传递给 prod 和 tst。
function startFunc(){
var deferred = Q.resolve();
var a = [0,1,2,3];
a.forEach(function (num, i) {
var getVal = num;
deferred = deferred
.then(function(num){
var def = Q.defer();
console.log("nniteration:"+i + " a: "+getVal);
return def.resolve(getVal);
}).then(prod)
.then(tst)
.then(compare)
.catch(function(error){
console.log(error);
});
});
return deferred.promise;
}
这是一个 NodeJS 小提琴链接。转到链接并执行按 shift+Enter 键执行。https://tonicdev.com/pratikgala/5637ca07a6dfbf0c0043d7f9
当它被执行时,我想将getVal的值传递给prod作为承诺。
当我运行以下函数时,getVal 不会恢复到生产。
您可以大大简化循环,停止使用延迟反模式,并将 val 传递给prod()
,如下所示:
function startFunc() {
var a = [0, 1, 2, 3];
return a.reduce(function(p, val, i) {
return p.then(function() {
return prod(val);
}).then(test).then(compare).catch(function (error) {
console.log(error);
});
}, Q());
}
startFunc().then(function(finalVal) {
// completed successfully here
}, function(err) {
// error here
});
这旨在循环访问数组中的项目,将每个项目传递给prod()
并对数组中的每个项目运行承诺链,一个接一个,以便在数组中第一项开始处理之前完成数组中第一项的整个承诺链。 最终值将是一个承诺,它解析为.reduce()
循环中返回的任何步骤。 如果您希望累积返回值数组,也可以这样做。
仅供参考,您可以在此处阅读有关避免延迟反模式的信息。