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