来自异步库的async.map和来自bluebird的Promise.map有什么区别?

时间:2019-03-07 12:48:47

标签: javascript node.js async-await bluebird async.js

我自己解释:

我想做的是对其中一个库(异步或蓝鸟)使用async / await。

我不明白为什么这样行得通:

const promises = Promise.map (someArray, async item => {                
      const result = await getSomething(item);
      return {...item, ...result}
});

const promisesResults = await Promise.all(promises);

但是与async.map相同。它返回了我undefined

谢谢大家!

1 个答案:

答案 0 :(得分:1)

async是一个传统库,在传播承诺模式和出现本地承诺之前解决了与承诺相同的问题。 async 是基于回调的,并且没有意识到诺言和async 功能,它们是ES6诺言的语法糖。

该片段之所以起作用,是因为Promise.all需要一系列承诺:

Promise.all(promises);

并且数组mapasync函数回调提供了一个promise数组:

someArray.map(async item => { ... })

这不适用于async库,因为它应该与基于回调的iteratee函数一起使用,并且没有意识到async函数返回的承诺。

由于ES6 Promise缺少async库中的某些高级功能,因此可以使用Bluebird API或promise ponyfills进行扩充。