在数组上映射异步函数

时间:2017-12-15 06:20:22

标签: node.js asynchronous

我试图在数组上映射异步函数,我希望能达到这样的效果:

const result = orgs.map(org => 
  f(org)
    .then(res => return res))
// now result should be an array of res
console.log(result)

这不行,所以我尝试了另一种方式:

const result = []
orgs.map(org => 
  f(org)
    .then(res => result.push(res)))
// now result should be an array of res
console.log(result)

但是,这不起作用。

但我可以通过以下方式打印出结果:

orgs.map(org => 
  f(org)
    .then(res => console.log(res)))

关于这种行为如何发生的任何想法?

此外,我在一系列链接上使用find-rss

1 个答案:

答案 0 :(得分:1)

您可以使用Promise.all()来聚合多个承诺的结果。 承诺是非常有用的是javascript。

var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
}); 

Promise.all([p1, p2, p3]).then(values => { 
  console.log(values); // [3, 1337, "foo"] 
});

这是一个简单的例子,正如你所知,你的orgs map结果是一个promise数组,所以你可以使用Promise.all来得到你想要的东西