异步每个 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)
。例如,如果您在 forEach
loop 中推送到数组,那么您可以在 forEach
调用之后的行中访问推送的值。
【讨论】:
另外值得注意的是async.each
是并行执行的。如果需要,async.eachSeries
可用。以上是关于异步每个 vs forEach js的主要内容,如果未能解决你的问题,请参考以下文章
Stream forEachOrdered() vs forEach()
Stream forEachOrdered() vs forEach()
原生JS forEach()和map()遍历,jQuery$.each()和$.map()遍历