在一个循环中链接 JavaScript promises - bluebird
Chaining JavaScript promises in a loop - bluebird
我一直在阅读关于使用 bluebird 的承诺,并一直在努力实现以下目标:
我需要 运行 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 是使用承诺完成的,结果在回调函数变量 returnVal1 和 returnVal2 中返回。我怎样才能 chain/condense 这三个一起,以便一个 运行 一个循环一个接一个,然后 运行s func3 只使用承诺?
干杯。
将数据映射到 promises,然后使用 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");
});
您也可以链接承诺,例如:
.then(a=>b(a)).then(b=>c)
而不是
.then(a=>b(a).then(b=>c))
var jsObj = ["1", "2", "3", "4", "5"]; // has 5 elements
for (var i = 0; i < jsObj.length; i++) {
func1(jsObj[i]).then(function(returnVal1) {
// finished func1
func2(returnVal1).then(function(returnVal2) {
// finished func2
finalFn();
});
});
} // end of loop
// Now, I need to run the last function once the loop is complete
var count = 0;
function finalFn(){
count++;
if(count == jsObj.length){
var data = ["1222"];
func3(data, function() {
alert("all done");
});
}
}
我一直在阅读关于使用 bluebird 的承诺,并一直在努力实现以下目标:
我需要 运行 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 是使用承诺完成的,结果在回调函数变量 returnVal1 和 returnVal2 中返回。我怎样才能 chain/condense 这三个一起,以便一个 运行 一个循环一个接一个,然后 运行s func3 只使用承诺?
干杯。
将数据映射到 promises,然后使用 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");
});
您也可以链接承诺,例如:
.then(a=>b(a)).then(b=>c)
而不是
.then(a=>b(a).then(b=>c))
var jsObj = ["1", "2", "3", "4", "5"]; // has 5 elements
for (var i = 0; i < jsObj.length; i++) {
func1(jsObj[i]).then(function(returnVal1) {
// finished func1
func2(returnVal1).then(function(returnVal2) {
// finished func2
finalFn();
});
});
} // end of loop
// Now, I need to run the last function once the loop is complete
var count = 0;
function finalFn(){
count++;
if(count == jsObj.length){
var data = ["1222"];
func3(data, function() {
alert("all done");
});
}
}