Maison > interface Web > js tutoriel > Comment puis-je faire en sorte que les fonctions asynchrones se comportent de manière synchrone en JavaScript ?

Comment puis-je faire en sorte que les fonctions asynchrones se comportent de manière synchrone en JavaScript ?

Susan Sarandon
Libérer: 2024-11-18 03:31:02
original
837 Les gens l'ont consulté

How Can I Make Asynchronous Functions Behave Synchronously in JavaScript?

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

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

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

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!

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