在chrome和node环境环境中均输出2, 3, 1, 先输出2没什么好说的,3和1顺序让人有些意外php
缘由:
有一个事件循环,可是任务队列能够有多个。
整个script代码,放在了macrotask queue中,setTimeout也放入macrotask queue。
可是,promise.then放到了另外一个任务队列microtask queue中。
这两个任务队列执行顺序以下,取1个macrotask queue中的task,执行之。
而后把全部microtask queue顺序执行完,再取macrotask queue中的下一个任务。
代码开始执行时,全部这些代码在macrotask queue中,取出来执行之。
后面遇到了setTimeout,又加入到macrotask queue中,
而后,遇到了promise.then,放入到了另外一个队列microtask queue。
等整个execution context stack执行完后,
下一步该取的是microtask queue中的任务了。
所以promise.then的回调比setTimeout先执行。node
async function a() { await console.log(1) console.log(2) } async function b() { await a(); } b(); console.log(3)
输出: 1, 3, 2
chrome
async function a() { await console.log(1) console.log(2) } async function b() { await a(); } b(); setTimeont(function(){console.log(3)},0)