javascript承诺执行命令

时间:2017-09-11 20:12:06

标签: javascript promise

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

执行顺序是什么?

1 个答案:

答案 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分别按顺序运行,将队列带回[]。

如果任何一个函数是异步的,那么这个订单可能会根据每个函数完成的时间大幅改变。