第 1 步:我有功能。這個函式沒有回報。無論如何,我是該函式的 async 關鍵字,因為我需要在此函式中使用 await 。
解釋代碼示例:
const foo1 = async () => {
const a1 = await something... //For example findValueInDatabase()
}
第 2 步:我在其主體中再次使用 await 定義了另一個異步函式。再也不回來了。
解釋代碼示例:
const foo2 = async () => {
const a2 = await something... //For example sendEmail()
}
第 2 步:現在我想在停止一的函式中呼叫第 2 步中定義的函式:
解釋代碼示例:
const foo1 = async () => {
const a1 = await something... //For example findValueInDatabase()
foo2() //or await foo2()
...some more code to be executed...
}
關于 foo1 中 foo2 的行為的期望和問題:
我是否需要將 await 關鍵字添加到 foo2 才能等待它?這有什么不同嗎?如果是這樣,有什么區別?
我希望這個問題的答案是否定的。foo2 將執行并在其中等待 a2,這意味著在決議 a2 之前不會執行進一步的代碼。所以 await 不會有任何區別,因為在 foo1 中呼叫 foo2 就像 foo2 的代碼直接在 foo1 中一樣。
我的期望錯了嗎?
uj5u.com熱心網友回復:
所有異步函式都回傳一個承諾。如果你關心 promise 的結果,你可以使用 await 或 promise.then 函式。但是如果沒有退貨和/或您不關心退貨,則不需要await/then
在 foo1 中,您可以await在 foo2 上使用以確保 foo1 在 foo2 之后完成
uj5u.com熱心網友回復:
await關鍵字告訴函式的執行在繼續之前“等待” foo2()。如果您省略其中await的代碼,代碼foo2()仍然會運行,但foo1()也會繼續運行,但不會確保foo2()已完成。這絕對是允許的,只是要小心,因為這會導致競爭條件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518332.html
