Ich versuche zu verstehen, wie Async/Await mit Promise funktioniert.
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> }
Soweit ich weiß, soll „await“ blockierend sein, und im obigen Code scheint es die Verwendung des Grundelements timestamp
返回对象 bl
zu verhindern. Meine Funktion gibt dann den ursprünglichen Wert zurück, aber die Zeitvariable wird auf das ausstehende Versprechen statt auf diesen ursprünglichen Wert gesetzt. Was habe ich verpasst?
异步前缀是 Promises 的一种包装器。
与相同
async
函数始终返回一个 Promise。这就是它报告异步工作完成情况的方式。如果您在另一个async
函数中使用它,则可以使用await
来等待其promise解决,但在非async
中函数(通常在顶层或在事件处理程序中),您必须直接使用 Promise,例如:...不过,如果您在 JavaScript 模块的顶层执行此操作,则所有现代环境现在都支持 模块中的顶级
await
:(请注意,如果该 Promise 被拒绝,您的模块将无法加载。如果即使 Promise 失败您的模块也能有意义地工作,请务必将其包装在
try
/catch 中
处理承诺拒绝。)它可能(或可能不会)以显式承诺回调术语的形式揭示了一些事情,让我们了解 JavaScript 引擎如何在幕后处理您的
async
函数:一些重要的说明:
new Promise
的函数(promise 执行器函数)由new Promise
同步调用。web3.eth.getBlock
来开始工作。new Promise
捕获并转换为 Promise 拒绝。then
错误)都将被捕获并转换为拒绝。