Invocation synchrone de fonctions asynchrones
Dans certains scénarios spécifiques, il peut être nécessaire de forcer les appels asynchrones à se comporter de manière synchrone au sein d'une base de code synchrone. Bien que cela ne soit généralement pas considéré comme une bonne pratique, voici comment y parvenir :
Bloquer avec Polling
Tout d'abord, il est important de noter que bloquer véritablement le thread d'exécution JavaScript sans geler l’interface utilisateur n’est pas réalisable. Cependant, il est possible de simuler le blocage en vérifiant périodiquement l'achèvement de l'opération asynchrone.
function doSomething() { var data; function callback(d) { data = d; } myAsynchronousCall(param1, callback); // Poll until the data is set by the callback while (!data) { // Sleep for a short duration to avoid excessive polling } return data; }
Cette approche bloque efficacement la fonction appelante jusqu'à ce que le rappel soit invoqué. Cependant, cela nécessite des interrogations fréquentes, ce qui peut être inefficace.
Approche basée sur le rappel
Une solution plus propre et plus efficace consiste à transmettre une fonction de rappel à l'instance asynchrone d'origine. call.
function doSomething(callback) { myAsynchronousCall(param1, function(data) { callback(data); }); }
La fonction modifiée doSomething() prend désormais un rappel comme argument, qui sera invoqué avec les données renvoyées par l'appel asynchrone.
doSomething(function(data) { console.log(data); });
Cette méthode permet les appels asynchrones doivent être traités de manière transparente dans le code synchrone, sans blocage ni interrogation excessive.
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!