ホームページ > 記事 > ウェブフロントエンド > Array.forEach は JavaScript と Node.js では非同期ですか?
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() を使用してコールバック関数の実行をスケジュールすることで、性質を変更します。
その他の非同期オプション:
以上がArray.forEach は JavaScript と Node.js では非同期ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。