Maison >interface Web >js tutoriel >Comment \'Synchroniser\' les appels Javascript asynchrones ?

Comment \'Synchroniser\' les appels Javascript asynchrones ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-17 13:50:02968parcourir

How to

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn