Maison  >  Article  >  interface Web  >  Les fonctions JavaScript asynchrones peuvent-elles être exécutées de manière synchrone sans geler l'interface utilisateur ?

Les fonctions JavaScript asynchrones peuvent-elles être exécutées de manière synchrone sans geler l'interface utilisateur ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-16 18:40:03781parcourir

Can Asynchronous JavaScript Functions Be Executed Synchronously Without Freezing the UI?

Exécution synchrone de fonctions JavaScript asynchrones

Dans certaines situations, il peut être nécessaire d'exécuter des fonctions JavaScript asynchrones de manière synchrone, mais sans figer l'interface utilisateur . Bien que cela ne soit généralement pas considéré comme une bonne pratique, il existe des cas spécifiques où cela peut être jugé nécessaire.

Le défi

Le but est de bloquer la fonction jusqu'au rappel est appelé, sans geler l'interface utilisateur. Cela présente un défi car le blocage de JavaScript entraîne généralement le blocage de l'interface utilisateur.

Solution possible

Une solution possible consiste à utiliser l'interrogation pour vérifier une variable globale définie par le rappel. . Voici un exemple :

function doSomething() {

  // Callback sets received data to a global variable
  function callBack(d) {
    window.data = d;
  }

  // Start the async
  myAsynchronousCall(param1, callBack);
}

// Start the function
doSomething();

// Clear the global data
window.data = null;

// Poll at an interval until data is found in the global
var intvl = setInterval(function() {
  if (window.data) {
    clearInterval(intvl);
    console.log(data);
  }
}, 100);

Cette approche permet à la fonction appelante de bloquer jusqu'à ce que les données soient reçues du rappel, sans geler l'interface utilisateur. Cependant, cela suppose que la fonction doSomething() peut être modifiée pour utiliser la variable globale.

Bonne pratique

Il est important de noter que cette approche est considérée comme sous-optimale. solution. Idéalement, les appels asynchrones devraient être traités à l'aide de rappels ou de promesses, plutôt que de bloquer la fonction. Cependant, cela peut être nécessaire comme solution de contournement temporaire dans certaines bases de code qui ne peuvent pas être facilement modifiées.

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