javascript - 在循环中链接 JavaScript Promise - bluebird

标签 javascript jquery promise bluebird

我一直在使用 bluebird 阅读 Promise,并一直在努力实现以下目标:

我需要运行 func1 和 func2 直到循环结束。完成后,我想运行 func3。代码如下:

注意:所有函数都有一个回调函数(以表明操作已成功完成)

var jsObj = ["1", "2", "3", "4", "5"]; // has 5 elements

for (var i = 0; i < jsObj.length; i++) {
var arr1 = [];
arr1 = jsObj[i];
func1(arr1).then(function(returnVal1) {
// finished func1
 func2(returnVal1).then(function(returnVal2) {
// finished func2
});
});
} // end of loop

// Now, I need to run the last function once the loop is complete
var data = ["1222"];
func3(data, function() {
alert("all done");
});

func1 和 func2 使用 Promise 完成,结果在回调函数变量 returnVal1 和 returnVal2 中返回。如何将这三个链接/压缩在一起,以便一个在循环中在另一个之后运行,然后仅使用 Promise 运行 func3?

干杯。

最佳答案

将数据映射到promise,然后使用promise.all:

var jsObj = ["1", "2", "3", "4", "5"]; // has 5 elements

var promises = jsObj.map(function(obj){
 return func1(obj).then(function(value){
   return func2(value).then(function(val){
     return val;
   });
 });
});

Promise.all(promises).then(function(results){
 alert("all done");
});

您还可以链接 promise ,例如:

.then(a=>b(a)).then(b=>c)

而不是

.then(a=>b(a).then(b=>c))

关于javascript - 在循环中链接 JavaScript Promise - bluebird,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45414461/

相关文章:

javascript - jQuery 的字符串简单数学运算

javascript - 使用 React Conditional Rendering,如何避免 0 被视为未定义?

javascript - 使用图像对象序列化和反序列化 Canvas (Fabricjs)

Jquery 显示/隐藏图片点击

javascript - q.all 似乎表现不同,为什么?

javascript - 为什么有时重写类函数不起作用?

javascript - jQuery 日期格式 [今天/明天/昨天/月-日] - 无法正常工作

javascript - 通过ajax上传文件以及表单数据的其余部分

javascript - promise 错过明白

promise - 相当于 Promise.try 和 Observables?