async function run() { for (let i = 0; i < 2; i++) { for (let j = 0; j < 2; j++) { await new Promise(resolve => { setTimeout(async () => { await new Promise(resolve => { setTimeout(() => { console.log(1) resolve() }, 3000) }) console.log(2) resolve() }, 2000) }) } } console.log(3) } run() console.log(0) // 輸出順序 // 0 // 1 // 2 // 1 // 2 // 1 // 2 // 1 // 2 // 3
須要注意的是,async 的影響範圍只在其做用函數方法內,因此先輸出 ‘0’;再則根據 await 一層一層地往裏面執行,resolve 不能更名,且必需要在執行完各項操做後返回,不然會中斷其後全部操做!javascript
async function run() { let arr = [] let target = [1, 2] target.forEach(i => { arr.push( new Promise(resolve => { setTimeout(() => { console.log(1) resolve() }) }) ) }) await Promise.all(arr).then(val => { console.log(2) }) console.log(3) } run() console.log(0) // result // 0 // 1 // 1 // 2 // 3