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中文網其他相關文章!