[英]Javascript await a function inside an async function
我有以下代碼:
function test1() {
test2.execute();
}
我正在嘗試在異步 function 中使用 await 來使 test1() 首先執行:
it("title", async () => {
await test1();
await firebase.assertSucceeds(true);
})
但不知何故 function test1()
在firebase.assertSucceeds(true)
之前沒有執行。 test1()
返回一個回調。 我嘗試使用回調,它也無濟於事。
function test1() {
test2.execute().then(() => {
return;
});
}
it("title", async () => {
let x = await test1();
await firebase.assertSucceeds(true);
})
還是同步的。 我在這里做錯了什么?
如果您想await
,function 必須返回Promise
。
例如:
function test1() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("I'm done")
}, 500)
})
}
請注意,在firebase 文檔中, assertSucceeds
僅將 promise 作為唯一的參數。 因此,請考慮將promise 傳遞給它,如果這就是您要開始的事情,它總是可以解決。
await firebase.assertSucceeds(Promise.resolve())
在您的第一個片段中,您正在等待返回 void(無)的 test1,為了等待工作,它應該應用於 promise,您可以通過返回返回 Promise 的 test2.execute() 來實現:
function test1() {
return test2.execute();
}
或通過使 test1 異步並等待 test2 完成執行:
async function test1() {
await test2.execute();
}
ps:異步 function 返回解析的 promise 並返回分辨率值,例如:
async function test(){
return 2;
}
在引擎蓋下被翻譯成這樣:
function test(){
return Promise.resolve(2);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.