我正在尝试返回一个使用异步调用构建的数组,如下所示:
我想在调用myArr
foo()
function foo(){
let promiseArray = [];
let singlePromise;
let myArr = [];
for(let node of Nodes){
singlePromise = getSomePromise(node);
singlePromise.then(function(result){
myArr.push(bar(result));
});
promiseArray.push(singlePromise);
}
// return Promise.all(promiseArray)? but then I lose myArr
}
那我怎样才能返回myArr
?
答案 0 :(得分:1)
而不是推送到myArr
,推送解决所需值的承诺:
function foo() {
const promiseArray = [];
for (const node of Nodes) {
const singlePromise =
getSomePromise(node).then(function (result) {
return bar(result);
});
promiseArray.push(singlePromise);
}
return Promise.all(promiseArray);
}
如果你正在使用像Bluebird这样的诺言库(强烈推荐),你甚至可以这样做:
const foo = () =>
Promise.map(Nodes, node =>
getSomePromise(node).then(bar)
);
如果Nodes
是一个数组:
const foo = () =>
Promise.all(Nodes.map(getSomePromise)).map(bar);
答案 1 :(得分:0)
Promise.all
将使用数组解析
return Promise.all(promiseArray)
.then(arr){
// arr is an array
}