【发布时间】:2021-10-17 10:03:00
【问题描述】:
这个承诺链是如何工作的?
Promise.resolve(1)
.then(x => console.log(1))
.catch(x => console.log(2))
.then(x => console.log(3))
Promise.reject(1)
.then(x => console.log(4))
//.then(x => console.log(5))
.catch(x => console.log(6))
.then(x => console.log(7))
结果 1 6 3 7
为什么结果不等于 1 3 6 7 ?
如果添加.then(x => console.log(5)),则结果等于 1 3 6 7。
它是如何工作的?
【问题讨论】:
-
如果承诺链未链接,您应该不期望任何特定的承诺解决顺序。您拥有的唯一保证是同一承诺链的链接按相互关联的顺序解析。就是这样。
-
@T.J.Crowder 你的意思是this search?你的有
user:me。我很困惑为什么你认为我的答案是相关的:P -
但是,虽然这两个链之间的顺序是定义的,只要代码完全如图所示,它不是你应该依赖的东西。如果您需要在两个 Promise 链之间进行协调,请有意地协调它们。 :-)
-
@T.J.Crowder 只是补充一下 - 这是here的解释,因为它们以循环顺序解决。但不一定适用于任何两个承诺链。在某些情况下,解决单个承诺需要不止一个滴答声,因此订单可能不是
a b a b a b,而是a b b b a a。因此建议不要依赖任何具体的东西。 -
@VLAZ 将“在某些情况下”设为“在大多数情况下”。如果你总是立即解决它们,你根本不应该使用它们:-)
标签: javascript promise