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
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")