【发布时间】:2021-12-15 23:25:07
【问题描述】:
给定以下代码
Promise.resolve().then(() => {
console.log(0);
return Promise.resolve(4);
}).then((res) => {
console.log(res)
})
Promise.resolve().then(() => {
console.log(1);
}).then(() => {
console.log(2);
}).then(() => {
console.log(3);
}).then(() => {
console.log(5);
}).then(() => {
console.log(6);
})
我认为这会给0 4 1 2 3 5 6,但输出是0 1 2 3 4 5 6。
谁能评论为什么会这样?
【问题讨论】:
-
这种行为是否跨浏览器一致?
-
你有两个独立的 Promise 链,它们相互跑出带外。如果两个promise链合二为一,就可以保证最终结果的顺序。
-
@88jayto 输出为
0 1 2 3 4 5 6。 -
@StrahinjaAjvaz 更新了我的评论,这也可能有助于解释您所看到的:stackoverflow.com/questions/36870467/…
-
仅供参考,理解为什么这在使用 Promise 编程中没有用处,原因有很多:1)如果你真的关心独立 Promise 链之间的顺序,那么你不需要制作链独立,因此您可以控制订单。 2) Promise 规范会不时更改,并且此详细程度可能会发生变化,3) 真实代码将具有具有不可预测完成的真实异步操作,因此此类问题不会在真实异步代码中发生。