繁体   English   中英

Javascript 在异步 function 中等待 function

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM