Array.forEach JavaScript 和 Node.js 中的异步
Array.forEach 是一个内置的 JavaScript 方法,它执行以下回调函数:数组中的每个元素。出现一个常见问题:Array.forEach 是否异步运行?
答案: 不,Array.forEach 是阻塞。这意味着它是同步执行的,这意味着 JavaScript 引擎将等待回调函数完成执行,然后再继续处理数组中的下一个元素。
实现细节:
Array.forEach 的 MDN 规范提供了对其实现的更清晰的理解:
if (!Array.prototype.forEach) { Array.prototype.forEach = function(fun /*, thisp */) { "use strict"; if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (typeof fun !== "function") throw new TypeError(); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in t) fun.call(thisp, t[i], i, t); } }; }
在此实现中,为数组中的每个元素同步调用回调函数。
非阻塞替代方案:
如果您需要异步执行大量元素,您可以实现自定义算法:
function processArray(items, process) { var todo = items.concat(); setTimeout(function() { process(todo.shift()); if(todo.length > 0) { setTimeout(arguments.callee, 25); } }, 25); }
此方法利用 JavaScript 的异步使用 setTimeout() 来安排回调函数的执行。
其他异步选项:
以上是JavaScript 和 Node.js 中的 Array.forEach 是异步的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!