Array.forEach Asynchronicity en JavaScript et Node.js
Array.forEach est une méthode JavaScript intégrée qui exécute une fonction de rappel pour chaque élément d'un tableau. Une question courante se pose : Array.forEach se comporte-t-il de manière asynchrone ?
Réponse : Non, Array.forEach est bloquant. Cela signifie qu'il s'exécute de manière synchrone, ce qui signifie que le moteur JavaScript attendra la fin de l'exécution de la fonction de rappel avant de passer à l'élément suivant du tableau.
Détails de mise en œuvre :
La spécification MDN pour Array.forEach permet une compréhension plus claire de son implémentation :
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); } }; }
Dans cette implémentation, la fonction de rappel est appelée de manière synchrone pour chaque élément du tableau.
Alternative non bloquante :
Si vous avez besoin d'une exécution asynchrone d'un grand nombre d'éléments, vous pouvez implémenter un algorithme personnalisé :
function processArray(items, process) { var todo = items.concat(); setTimeout(function() { process(todo.shift()); if(todo.length > 0) { setTimeout(arguments.callee, 25); } }, 25); }
Cette approche utilise l'algorithme asynchrone de JavaScript nature en utilisant setTimeout() pour planifier l'exécution de la fonction de rappel.
Autres options asynchrones :
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!