我最近开始做一个 Node 项目,并且一直在使用 không đồng bộ
库。我有点困惑哪个选项会更快。在某些数据上使用 async.map
并获取其结果,或使用 async.each
迭代一组用户并将他们的相应操作放入一个函数调用数组中,我使用 async.parallel
执行。
类似于 JavaScript 的 forEach
, async.each
接受三个参数,第一个是要迭代的数组,第二个是应用于数组每个元素的函数(即第一个参数)。第二个参数的形式是iterator(item, callback)
,其中trình lặp lại
是函数名,gọi lại
也是一个函数,使用 callback(err)
形式,在 trình lặp lại
完成后调用。 (Để ý:“如果没有发生错误,回调应该在没有参数或显式空参数的情况下运行。”)async.each
的第三个参数是回调它在所有 trình lặp lại
函数执行后被调用,就像每个迭代器的回调都有 callback(err)
的形式。
Nguồn
为简洁起见,以下是 async.map
的参数形式:
arr
- 要迭代的数组。
iterator(item, callback)
- 应用于 arr
中每个项目的函数。迭代器被传递一个 callback(err,transformed)
必须被调用一次它已完成,但出现错误(可以是 vô giá trị
)和转换后的项目。
callback(err, results)
- 当所有 trình lặp lại
时调用的回调功能已完成,或发生错误。结果是一个数组arr
中的转换项目。
Nguồn
得到问题答案的核心,async.map
maps 通过调用 将其第一个参数传递给数组iterator
在数组的每个元素上,这是它的第一个参数,但 async.map 必须返回一个数组,而 async.each
则不然。这体现在async.map
的第三个参数中的第二个(我指的是results
),它必须是一个数组。也就是说,在最简单的例子中,
async.map([1, 2, 3], function iterator(item, callback_it){ return 2*item; }, callback(err, results))
假设你已经实现了 callback_it
Và gọi lại
,那么在上面的例子中 [2, 4, 6] 将作为 callback 的第二个参数传递
Tôi là một lập trình viên xuất sắc, rất giỏi!