async.map或async.each与async.parallel有什么区别?

Muk*_*ina 11 javascript node.js async.js

我最近开始研究一个节点项目,并且一直在使用这个async库.我有点担心哪个选项会更快.使用async.map一些数据并获取其结果或使用async.each迭代用户数组并将其相应的操作放入我执行的函数调用数组中async.parallel.

Fra*_*ano 3

与 JavaScript 类似forEachasync.each需要三个参数,第一个是要迭代的数组,第二个是应用于数组每个元素的函数(这是第一个参数)。第二个参数的形式是iterator(item, callback)其中iterator的函数名,callback也是一个函数,完成callback(err)后调用一次的形式iterator。(注意:“如果没有发生错误,则回调应该在没有参数的情况下运行,或者使用显式的空参数运行。”) 的第三个参数async.each是在执行所有函数后调用的回调iterator,就像每个迭代器的回调一样表格callback(err)

来源


为简洁起见,以下是 的参数的形式async.map

  • arr- 要迭代的数组。
  • iterator(item, callback)- 应用于 中每个项目的函数arr。迭代器被传递给 a callback(err, transformed),一旦完成并出现错误(可以是null)和转换后的项,就必须调用该迭代器。
  • callback(err, results)iterator - 当所有函数完成或发生错误时调用的回调。结果是来自 的转换后的项目的数组arr

来源


进入问题答案的核心,通过async.map 调用作为其第一个参数iterator的数组的每个元素将其第一个参数映射到数组,但 async.map必须返回一个 array,而async.each不会。async.map这反映在(我指的是)的第三个参数的第二个中results,它必须是一个数组。也就是说,在最简单的例子中,

async.map([1, 2, 3], function iterator(item, callback_it){ return 2*item; }, callback(err, results))
Run Code Online (Sandbox Code Playgroud)

假设您已经实现了callback_itand callback,那么在上面的示例中 [2, 4, 6] 将作为第二个参数传递callback