Promise.resolve()
.then(() => console.log(2))
.then(() => console.log(3));
Promise.resolve()
.then(() => console.log(4))
.then(() => console.log(5));
console.log(1);
为什么上面的代码片段结果是1 2 4 3 5
而不是1 2 3 4 5
。
执行顺序是什么?
答案 0 :(得分:-2)
它按此顺序运行,因为这是回调被输入回调队列的顺序。
让我们来看看这段代码的作用:
Promise.resolve()
.then(() => console.log(2))
.then(() => console.log(3));
Promise.resolve()
.then(() => console.log(4))
.then(() => console.log(5));
console.log(1);
首先,运行主代码,创建并解析两个promise,并将两个回调添加到回调队列中;回调2和4.队列现在是[2,4]。然后console.log(1)发生,函数结束。
现在函数已经完成,回调队列中的下一个回调运行,因此记录2,然后将新的回调推送到回调队列,回调3.队列现在是[4,3]。
接下来,回调4运行并记录4,并将回调5推入队列。队列现在是[3,5]
接下来,回调3和5分别按顺序运行,将队列带回[]。
如果任何一个函数是异步的,那么这个订单可能会根据每个函数完成的时间大幅改变。