首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >async.map和带有async.parallel的async.each有什么不同?

async.map和带有async.parallel的async.each有什么不同?
EN

Stack Overflow用户
提问于 2015-05-14 08:40:19
回答 3查看 10K关注 0票数 11

我最近开始了一个节点项目,并且一直在使用async库。我有点困惑,不知道哪个选项会更快。对一些数据使用async.map并获取其结果,或者使用async.each遍历用户数组并将其相应的操作放入我使用async.parallel执行的函数调用数组中。

EN

回答 3

Stack Overflow用户

发布于 2015-05-14 09:27:35

与JavaScript的forEach类似,async.each有三个参数,第一个参数是要迭代的数组,第二个参数是应用于数组中每个元素的函数(即第一个参数)。第二个参数的形式是iterator(item, callback),其中iterator是函数的名称,callback也是一个函数,形式是callback(err),一旦iterator完成就会调用它。(注意:“如果没有发生错误,回调应该在没有参数或显式null参数的情况下运行。”)async.each的第三个参数是在执行所有iterator函数之后调用的回调,与每个迭代器的回调一样,其形式为callback(err)

Source

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

  • arr -迭代over.
  • iterator(item, callback)的数组-应用于arr中每一项的函数。向迭代器传递一个callback(err, transformed)和一个转换后的item.
  • callback(err, results) -A回调,一旦完成并返回错误(可以是null),则必须调用该回调,该回调在所有iterator函数完成或发生错误时调用。结果是来自arr.

的转换项的数组

Source

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

代码语言:javascript
复制
async.map([1, 2, 3], function iterator(item, callback_it){ return 2*item; }, callback(err, results))

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

票数 3
EN

Stack Overflow用户

发布于 2015-05-14 13:12:27

哪个选项更快

别担心。这种差异即使明显,也是微不足道的,而且专用的async函数也得到了很好的优化。甚至不要试图想出你自己的想法。

对一些数据使用async.map并获得其结果的

如果这就是你想要做的,使用map。它就在那里,供您用于此目的,并且可读性很好。

使用async.each遍历用户数组,并将用户的相应操作放入我使用async.parallel执行的函数调用数组中。

听起来不是个好主意。在大多数情况下,“将函数放入数组”是一种同步操作,因此您根本不会使用async,而是使用本机数组forEach。或者更确切地说,只是

代码语言:javascript
复制
async.parallel(data.map(function(d) {
    return function(cb) {
        // do what needs to be done with d and pass cb
    };
}), function(err, results){ … });

但与直接使用async.map相比,这看起来毫无意义(而且几乎没有速度)。

票数 1
EN

Stack Overflow用户

发布于 2015-12-30 16:32:29

一个不同之处在于,async.each和async.map为您创建任务,将它们推入tasks数组,并使用这些任务调用async.parallel。您不必担心任务的创建。

async.map和async.each之间的区别:async.each不允许在回调中获取结果,而as async.map允许在数组中获取结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30227494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档