1. 程式人生 > 其它 >async/wait 多個async函式巢狀

async/wait 多個async函式巢狀

1. 假如函式

async function A(){
  await customFun();  
  console.log("A");  
}

A()會等到customFun()的函式體內所有的程式碼執行結束,再執行console.log("A")。

async function customFun() {
    console.log("customFun")
    await new Promise((res,rej)=>{
        let t = 1000;
        setTimeout(()=>{
            console.log(`setTimeout ${t}ms`);
            res(
777); } , t); console.log(`promise ${t}`); } ).then((result)=>{ console.log(`result ${result}`) } ); console.log("f-2") }

如果customFun()的函式體內使用了await,也會執行customFun()的函式await行下面所有程式碼,然後再返回執行。

結果為:
customFun
promise 1000
setTimeout 1000ms
result 777
f-2

1.例項

async function f() {
    await console.log("f");
    console.log("f-2")
}

async function f0() {
    console.log("f0");
    await f();
    console.log("f0-2");
}

async function f1() {
    console.log("f1")
    await f0();
    //加了await, 會等到f0()的”f0-2"輸出之後再輸出f1-2;沒加await,
    console.log("f1-2")

}

async 
function f2() { console.log("f2") await f1(); console.log("f2-2") } // f2(); // f2 // f1 // f0 // f // f-2 // f0-2 // f1-2 // f2-2

2.

console.log("start")
async function f() {
    console.log("f")
    await new Promise((res,rej)=>{
        let t = 1000;
        setTimeout(()=>{
            console.log(`setTimeout ${t}ms`);
            res(777);
    
        }
        , t);
        console.log(`promise ${t}`);
    }
    ).then((result)=>{
        console.log(`result ${result}`)
    }
    );
    console.log("f-2")
}

async function f0() {
    console.log("f0");
    await f();  //在這兒取消await 或者加上await,分析結果。
    console.log("f0-2");
}

async function f1() {
    console.log("f1")
    await f0();
    //加了await, 會等到f0()的”f0-2"輸出之後再輸出f1-2;沒加await,
    console.log("f1-2")
}
async function f2() {
    console.log("f2")
    await f1();
    console.log("f2-2")
}

f2();
console.log("end")