Synchronisation des appels JavaScript asynchrones
Introduction
Les fonctions JavaScript asynchrones nous permettent d'effectuer des tâches simultanément sans bloquer le thread principal. Cependant, dans certains scénarios, il peut être nécessaire d'appeler une fonction asynchrone de manière synchrone, bloquant ainsi l'exécution en cours jusqu'à ce que la tâche soit terminée.
Implémentation
Contrairement aux idées reçues Selon moi, il est impossible de véritablement bloquer l'exécution de JavaScript de manière asynchrone sans affecter l'interface utilisateur. Une approche pour simuler le blocage consiste à interroger une variable globale, en attendant qu'elle soit définie par la fonction de rappel.
function doSomething() { // Global variable for callback data window.data = null; function callBack(d) { window.data = d; } // Start asynchronous call myAsynchronousCall(param1, callBack); // Start polling interval var intvl = setInterval(function() { if (window.data) { clearInterval(intvl); console.log(data); } }, 100); }
Bien que cette méthode obtienne un comportement semi-bloquant, elle n'est pas idéale car elle peut conduire à une surcharge de performances importante.
Solution préférée
Si possible, il est préférable de passer un rappel fonction à l'appel asynchrone et lui faire gérer le résultat lorsqu'il est prêt :
function doSomething(func) { function callBack(d) { func(d); } myAsynchronousCall(param1, callBack); } doSomething(function(data) { console.log(data); });
Cette approche évite la surcharge d'interrogation et permet un traitement asynchrone plus efficace.
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!