async库中的async.map与bluebird的Promise.map有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了async库中的async.map与bluebird的Promise.map有什么区别?相关的知识,希望对你有一定的参考价值。

我自己解释一下:

我想要做的是使用async / await与其中一个库(async或bluebird)。

我不明白为什么这样做很好:

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

const promisesResults = await Promise.all(promises);

但与async.map相同的却没有。它让我回到undefined

感谢大家!

答案

async是遗留库,它在承诺模式的传播和本地承诺的出现之前解决了与承诺相同的问题。 async库是基于回调的,不知道承诺和async函数,它们是ES6承诺的语法糖。

该片段有效,因为Promise.all需要一系列承诺:

Promise.all(promises);

并且使用map函数回调数组async提供了一系列promise。

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

这不适用于async库,因为它应该与基于回调的iteratee函数一起工作,并且不知道async函数返回的promise。

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

以上是关于async库中的async.map与bluebird的Promise.map有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

async.map 或 async.each 与 async.parallel 有啥区别?

为啥 async.map 函数可以与本机 fs.stat 函数一起使用?

为啥 async.map 返回多个数组副本?

async.map 不会在 nodejs 中调用回调

重构嵌套回调、node.js、异步

将额外参数传递给异步映射