[英]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.