J'essaie de comprendre comment fonctionne async/await avec Promise.
async function latestTime() { const bl = await web3.eth.getBlock('latest'); console.log(bl.timestamp); // Returns a primitive console.log(typeof bl.timestamp.then == 'function'); //Returns false - not a promise return bl.timestamp; } const time = latestTime(); // Promise { <pending> }
D'après ce que j'ai compris, wait est censé bloquer, et dans le code ci-dessus, il semble empêcher l'utilisation de la primitive timestamp
返回对象 bl
. Ma fonction renvoie ensuite la valeur d'origine, mais la variable time est définie sur la promesse en attente au lieu de cette valeur d'origine. Qu'est-ce que j'ai raté?
Le préfixe asynchrone est un wrapper pour Promises.
Idem que
async
函数始终返回一个 Promise。这就是它报告异步工作完成情况的方式。如果您在另一个async
函数中使用它,则可以使用await
来等待其promise解决,但在非async
fonction (généralement au niveau supérieur ou dans un gestionnaire d'événements), vous devez utiliser Promise directement, par exemple :...Cependant, si vous faites cela au niveau supérieur d'un module JavaScript, tous les environnements modernes prennent désormais en charge Niveau supérieur dans les modules
await
:(Notez que si cette promesse est rejetée, votre module ne pourra pas se charger. Si votre module fonctionne de manière significative même si la promesse échoue, assurez-vous de l'envelopper dans
try
/catch 中
pour gérer le rejet de la promesse.)Il peut (ou non) révéler quelque chose sous la forme de termes de rappel de promesse explicites, nous donnant une idée de la façon dont le moteur JavaScript gère vos
async
fonctions sous le capot :Quelques notes importantes :
new Promise
的函数(promise 执行器函数)由new Promise
synchrone.web3.eth.getBlock
pour commencer à travailler.new Promise
détectées et converties en un rejet de promesse.then
que nous transmettons) seront détectées et converties en rejet.