簡體   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