Array.forEach est-il asynchrone en JavaScript ?
Contrairement à ses homologues asynchrones dans Node.js, l'implémentation native Array.forEach en JavaScript fonctionne de manière synchrone. Cela signifie que lorsque vous appelez la fonction sur un tableau avec une fonction qui effectue des opérations intensives, le navigateur se bloquera jusqu'à ce que tous les éléments aient été traités.
Pour mieux comprendre cette opération, examinons la spécification de l'algorithme forEach :
<code class="javascript">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); } }; }
Ce code démontre que forEach parcourt tous les éléments du tableau, appelant la fonction fournie pour chaque élément de manière synchrone dans le thread principal.
Alternatives pour le traitement asynchrone
Si votre code nécessite une opération non bloquante, vous pouvez envisager des approches alternatives :
Utilisation de setTimeout :
<code class="javascript">function processArray(items, process) { var todo = items.concat(); setTimeout(function () { process(todo.shift()); if (todo.length > 0) { setTimeout(arguments.callee, 25); } }, 25); }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!