Maison > interface Web > js tutoriel > Comment utiliser Async/Await pour suspendre l'exécution des rappels en JavaScript ?

Comment utiliser Async/Await pour suspendre l'exécution des rappels en JavaScript ?

Susan Sarandon
Libérer: 2024-10-29 14:16:02
original
509 Les gens l'ont consulté

How to Use Async/Await to Pause Execution for Callbacks in JavaScript?

Utiliser Async/Await pour suspendre l'exécution des rappels

Lors du traitement des rappels, il peut être souhaitable de suspendre l'exécution d'une fonction jusqu'au rappel a renvoyé une valeur. En programmation synchrone, cela peut être réalisé avec des mécanismes de blocage comme join(). Cependant, dans la programmation asynchrone, cela est souvent indésirable.

Supposons que vous disposiez d'une fonction de rappel qui garantit d'être appelée exactement une fois et que vous souhaitiez modifier la fonction suivante pour utiliser async/await :

test() {
  api.on( 'someEvent', function( response ) {
    return response;
  });
}
Copier après la connexion

Le but est de le convertir en une fonction asynchrone qui attend l'exécution du rappel, comme ceci :

async test() {
  return await api.on( 'someEvent' );
}
Copier après la connexion

Async/await seul ne peut pas y parvenir, car cela nécessite qu'une promesse soit renvoyée par api.on(). Pour remédier à cela, nous pouvons envelopper le rappel dans une fonction de retour de promesse :

function apiOn(event) {
  return new Promise(resolve => {
    api.on(event, response => resolve(response));
  });
}
Copier après la connexion

Maintenant, nous pouvons réécrire test() en tant que fonction asynchrone :

async function test() {
  return await apiOn( 'someEvent' ); // await is optional here (returns a Promise)
}
Copier après la connexion

Notez que async les fonctions renvoient également des promesses elles-mêmes. Pour obtenir le résultat réel de test(), il doit être attendu dans une fonction asynchrone externe :

async function whatever() {
  const response = await test();
  // use response here
}
Copier après la connexion

En tirant parti de la fonction Promise-wrapping, nous pouvons utiliser async/await pour suspendre efficacement l'exécution de test() jusqu'à ce que le rappel ait renvoyé une valeur.

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