Javascript中的承诺不变性

时间:2020-06-14 19:16:08

标签: javascript promise

我知道JS中的Promise是不可变的。

根据:What does it mean for promises to be immutable and their guaranteed value?

promise是单向闩锁。用值或 由于某种原因而被拒绝,其状态和价值/原因永远不会改变。 因此,无论您对同一诺言执行.then()多少次, 总是会得到相同的结果。

因此,我对来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise的这张图片感到困惑 enter image description here

在Promise被实现或被拒绝(已解决)之后,它似乎返回的Promise是(待定)。为什么呢?

1 个答案:

答案 0 :(得分:3)

每次调用.then().catch()都会返回一个新的Promise。该承诺将根据调用该处理程序时从.then().catch()处理程序中发生的情况而被解决或拒绝。链开始处的承诺确实是一成不变的,但是一旦其他人在其上调用.then().catch(),他们就会从每个调用中返回一个新的Promise,这些调用的状态取决于内部发生的情况在.then().catch()处理程序中运行的代码。

当您从.then().catch()获得新的承诺时,由于.then().catch()内部的代码尚未被调用,它将始终处于待处理状态(最初的承诺尚未致电给他们)。这些语句只是在原始诺言上注册处理程序。

当调用这些处理程序时,它们将确定新Promise的状态。如果它们返回纯值,则该新承诺将用该值解决。如果他们抛出,那新的诺言将被拒绝。如果他们返回承诺,则该新承诺将遵循从.then().catch()处理程序返回的该新承诺的最终状态,并且它将像返回的承诺一样解决或拒绝。 >

相关问题