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

Comment \'Synchroniser\' les appels Javascript asynchrones ?

Barbara Streisand
Libérer: 2024-11-17 13:50:02
original
967 Les gens l'ont consulté

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);
}
Copier après la connexion

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);
});
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal