Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript async库中的async.map和bluebird中的Promise.map有什么区别?_Javascript_Node.js_Async Await_Bluebird_Async.js - Fatal编程技术网

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

Javascript async库中的async.map和bluebird中的Promise.map有什么区别?,javascript,node.js,async-await,bluebird,async.js,Javascript,Node.js,Async Await,Bluebird,Async.js,我解释说: 我想做的是将async/await与那些库async或bluebird中的一个一起使用 我不明白为什么这样效果很好: const promises = Promise.map (someArray, async item => { const result = await getSomething(item); return {...item, ...result} }); const promisesResults =

我解释说:

我想做的是将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的情况也不一样。它返回未定义的我

谢谢大家

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

此代码段之所以有效,是因为Promise.all需要一个承诺数组:

Promise.all(promises);
承诺数组提供了带有异步函数回调的数组映射:

someArray.map(async item => { ... })
这不适用于异步库,因为它应该适用于基于回调的迭代对象函数,并且不知道异步函数返回的承诺


由于ES6 promises缺少async库中的一些高级功能,因此可以使用Bluebird API或。

对其进行增强,但async.map没有它不可能是相同的,因为它是不同的库。您到底要尝试什么代码?const promises=async.map someArray,async item=>{const result=wait getSomethingitem;return{…item,…interview};我理解!所以,如果我想使用async/await和Promise.all,那么最好使用bluebird库,对吗?是的,当您使用promises时,您不需要异步库。如果你答应的话,你可能也不需要蓝知更鸟。一切都是你所需要的。您最初发布的someArray.map代码仅适用于ES6承诺。你可以看看promise ponyfills,它提供了蓝鸟不依赖于整个蓝鸟库的大多数东西。我在我的项目中使用了很多promise.all,我阅读这些内容是为了避免每次我可以轻松使用蓝鸟的“promise.map”时创建一系列承诺。我要去看小马。告诉我表演怎么样?async还是bluebird?如果您不需要临时变量,可以跳过它,它就像Promise.allsomeArray.mapasync item=>。纯蓝鸟承诺链比纯本机承诺链更快,但由于异步以任何方式使用本机承诺,大多数性能改进都被放弃。我要说的是,这里的表现并不是选择蓝鸟的理由。至于异步库,我并没有测量,但承诺足够快,不必担心过早优化。