Maison  >  Article  >  interface Web  >  Comment suspendre gracieusement l'exécution jusqu'à la fin d'une fonction asynchrone ?

Comment suspendre gracieusement l'exécution jusqu'à la fin d'une fonction asynchrone ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 06:33:02624parcourir

How to Gracefully Pause Execution Until an Asynchronous Function Completes?

Une manière appropriée de suspendre l'exécution jusqu'à ce qu'une fonction soit terminée

Lorsque vous travaillez avec plusieurs fonctions asynchrones, il est souvent nécessaire d'attendre la fin d'une fonction avant d'en exécuter une autre. Examinons une solution et explorons des approches plus élégantes.

Solution originale

La solution fournie utilise un mécanisme d'interrogation avec setTimeout pour vérifier en permanence si la première fonction est terminée :

<code class="javascript">var isPaused = false;

function firstFunction() {
    isPaused = true;
    // Do something
    isPaused = false;
}

function secondFunction() {
    firstFunction();
    function waitForIt() {
        if (isPaused) {
            setTimeout(waitForIt, 100);
        } else {
            // Do something else
        }
    }
}</code>

Bien que cette méthode puisse fonctionner, elle n'est pas optimale en raison de sa dépendance aux sondages.

Approches élégantes

Fonctions de rappel :

Une pratique courante consiste à utiliser des fonctions de rappel pour gérer l'achèvement asynchrone :

<code class="javascript">function firstFunction(callback) {
    // Do asynchronous work
    callback();
}

function secondFunction() {
    firstFunction(() => {
        console.log("huzzah, I'm done!");
    });
}</code>

Lorsque firstFunction se termine, il appelle la fonction de rappel, permettant à secondFunction de continuer à s'exécuter.

Fonctions fléchées :

L'utilisation des fonctions fléchées simplifie cette approche :

<code class="javascript">firstFunction(() => console.log('huzzah, I'm done!'))</code>

Async/Await :

Dans le JavaScript moderne, async/await offre un format plus lisible et moyen efficace de suspendre l'exécution :

<code class="javascript">const secondFunction = async () => {
  const result = await firstFunction()
  // Do something else here after firstFunction completes
}</code>

Conclusion

Bien que l'interrogation puisse être utilisée pour attendre l'achèvement d'une fonction, les fonctions de rappel, les fonctions fléchées et async/await fournissent des solutions plus élégantes et plus performantes. Choisissez l'approche qui correspond le mieux à vos besoins spécifiques et à votre environnement JavaScript.

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