Maison >interface Web >js tutoriel >Pourquoi les fonctions asynchrones renvoient-elles toujours des promesses en JavaScript ?

Pourquoi les fonctions asynchrones renvoient-elles toujours des promesses en JavaScript ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 01:13:09128parcourir

Why Do Async Functions Always Return Promises in JavaScript?

Fonction asynchrone renvoyant une promesse au lieu d'une valeur

Dans la programmation asynchrone/attente, une fonction asynchrone renvoie toujours une promesse. Cette promesse représente l'achèvement éventuel du travail asynchrone de la fonction.

Lorsque vous appelez une fonction asynchrone dans un autre contexte asynchrone, vous pouvez utiliser wait pour faire une pause jusqu'à ce que la promesse soit satisfaite. Cependant, dans un contexte non asynchrone (souvent le niveau supérieur ou le gestionnaire d'événements), vous devez utiliser directement la promesse :

latestTime()
.then(time => {
  console.log(time);
})
.catch(error => {
  // Handle/report error
});

Dans les environnements modernes, l'attente de niveau supérieur est prise en charge dans les modules :

const time = await latestTime();

Pour mieux comprendre, examinons une version de rappel de promesse explicite de votre fonction asynchrone :

function latestTime() {
  return new Promise((resolve, reject) => {
    web3.eth.getBlock('latest')
      .then(bl => {
        console.log(bl.timestamp);
        console.log(typeof bl.timestamp.then == 'function');
        resolve(bl.timestamp);
      })
      .catch(reject);
  });
}

Dans ce rappel version :

  • La fonction d'exécuteur de promesse (transmise à la nouvelle promesse) s'exécute de manière synchrone, démarrant l'opération web3.eth.getBlock.
  • Toutes les erreurs dans l'exécuteur de promesse ou les rappels sont interceptées et converti en promesses de refus.

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