[英]Javascript promises inside promise
假设我有一个返回值的函数调用,我需要遍历该值并执行另一个返回结果的函数调用。 我需要将所有结果放入数组中,并在完成后显示数组中的所有值,例如:
var myArray = [];
oneAsyncCall().then(function(val) {
for (var i = 1; i < val; i++) {
anotherAsyncCall()().then(function(result) {
myArray.push(result);
});
}
});
一切完成后,我应该在哪里进行myeach迭代myArray?
你应该做这样的事情。 做一个promise
数组并使用Promise.all
var myArray = [];
const promiseArray = [];
oneAsyncCall.then(function(val){
for (var i = 1 ; i < val ; i++) {
promiseArray.push(anotherAsyncCall()());
}
Promise.all(promiseArray)
.then(function(dataArrayFromPromises){
//do things with dataArray which is an array of data from promiseArray promises
});
});
使用Promise.all
。 您可以使用ES6 Promise polyfill或bluebird。
oneAsyncCall()
.then(function(val) {
var promises = [];
for (var i = 1; i < val; i++) {
promises.push(anotherAsyncCall()());
}
return Promise.all(promises);
})
.then(function(myArray) {
// you get all result here
});
另外,我使用以下方法摆脱for
语句。
Promise.all(
Array(val-1).fill(undefined).map(() => anotherAsyncCall()())
)
因此可以将其重写为
oneAsyncCall()
.then((val) => Promise.all(
Array(val-1).fill(undefined)
.map(() => anotherAsyncCall()())
))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.