Saya cuba memahami cara async/menunggu berfungsi dengan 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> }
Dari apa yang saya faham, await sepatutnya menyekat, dan dalam kod di atas nampaknya menghalang timestamp
返回对象 bl
primitif daripada digunakan. Fungsi saya kemudian mengembalikan nilai asal, tetapi pembolehubah masa ditetapkan kepada janji yang belum selesai dan bukannya nilai asal itu. Apa yang saya terlepas?
Awalan tak segerak ialah pembalut untuk Janji.
Sama seperti
async
函数始终返回一个 Promise。这就是它报告异步工作完成情况的方式。如果您在另一个async
函数中使用它,则可以使用await
来等待其promise解决,但在非async
fungsi (biasanya di peringkat atas atau dalam pengendali acara), anda mesti menggunakan Promise secara langsung, contohnya:...Namun, jika anda melakukan ini pada tahap teratas modul JavaScript, semua persekitaran moden kini menyokong Tahap atas dalam modul
await
:(Perhatikan bahawa jika Janji ini ditolak, modul anda akan gagal dimuatkan. Jika modul anda berfungsi dengan bermakna walaupun Janji gagal, pastikan anda membungkusnya
try
/catch 中
untuk menangani penolakan janji.)Ia mungkin (atau mungkin tidak) mendedahkan sesuatu dalam bentuk istilah panggil balik janji yang jelas, memberi kami gambaran tentang cara enjin JavaScript mengendalikan fungsi
async
anda di bawah hud:Beberapa nota penting:
new Promise
的函数(promise 执行器函数)由new Promise
panggilan segerak.web3.eth.getBlock
untuk mula bekerja.new Promise
ditangkap dan ditukar menjadi penolakan Janji.then
ralat yang kami lalui) akan ditangkap dan ditukar menjadi penolakan.