异步每个 vs forEach js

Posted

技术标签:

【中文标题】异步每个 vs forEach js【英文标题】:Async each vs forEach js 【发布时间】:2017-06-16 17:02:11 【问题描述】:

谁能解释一下这两者的区别:

async.each(items, function (item, callback) 
    // Do something
);

或:

items.forEach(function(item) 
 // Do something
);

【问题讨论】:

同步与非同步(异步) 第一个将继续执行.each()之后的任何脚本,而循环仍在运行。第二个将在执行任何进一步的脚本之前完成循环。 查看answer 和ECMA specification for forEach 【参考方案1】:

async.each

是非阻塞的(异步的),意味着您的脚本在运行时继续执行。它也是并行运行的,这意味着同时处理多个项目。这是一个外部库提供的方法,我猜是async。它不是原生 javascript 功能,也没有添加到Array.prototype,因此你不能写myArray.each

Array.forEach

是阻塞的(同步的),意味着你的脚本的执行要等到它完成。它是连续运行的,意味着在处理前一个项目之后处理每个项目。 forEach 是一个原生 Javascript 函数 (spec) 并在 Array.proptotype 上定义,因此您可以简单地编写 myArray.forEach 而不是 Array.forEach(myArray)。例如,如果您在 forEachloop 中推送到数组,那么您可以在 forEach 调用之后的行中访问推送的值。

【讨论】:

另外值得注意的是async.each是并行执行的。如果需要,async.eachSeries 可用。

以上是关于异步每个 vs forEach js的主要内容,如果未能解决你的问题,请参考以下文章

Stream forEachOrdered() vs forEach()

Stream forEachOrdered() vs forEach()

node.js 中的 foreach 异步函数

原生JS forEach()和map()遍历,jQuery$.each()和$.map()遍历

JavaScript - For loop vs forEach

Scala:“map”vs“foreach” - 有没有理由在实践中使用“foreach”?