Skip to content

微任务执行问题 ​

代码1 ​

js
async function asy1() {
  console.log(1)
  await asy2()
  console.log(2)
}

async function asy2() {
  await 1
  console.log(3)
}

async function asy3() {
  Promise.resolve().then(() => {
    console.log(4)
  })
}

asy1()
asy3()

输出:

1
3
4
2

代码2 ​

js
async function asy1() {
  console.log(1)
  await asy2()
  console.log(2)
}

async function asy2() {
  await Promise.resolve().then(() => {
    console.log(3)
  })
}

async function asy3() {
  Promise.resolve().then(() => {
    console.log(4)
  })
}

asy1()
asy3()

输出:

1
3
4
2

代码3 ​

js
async function asy1() {
  console.log(1)
  await asy2()
  console.log(2)
}

async function asy2() {
  console.log(3)
}

async function asy3() {
  Promise.resolve().then(() => {
    console.log(4)
  })
}

asy1()
asy3()

输出:

1
3
2
4

结论: ​

通过已上代码可以看出,asy2 内若有异步(await 或 Promise.then),则 console.log(2) 会晚于 console.log(4) 输出(结果:1 3 4 2);若无异步,console.log(2) 会先于 console.log(4) 输出(结果:1 3 2 4)。

参考链接 ​

上次更新于: