我知道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的这张图片感到困惑
在Promise被实现或被拒绝(已解决)之后,它似乎返回的Promise是(待定)。为什么呢?
答案 0 :(得分:3)
每次调用.then()
或.catch()
都会返回一个新的Promise。该承诺将根据调用该处理程序时从.then()
或.catch()
处理程序中发生的情况而被解决或拒绝。链开始处的承诺确实是一成不变的,但是一旦其他人在其上调用.then()
或.catch()
,他们就会从每个调用中返回一个新的Promise,这些调用的状态取决于内部发生的情况在.then()
或.catch()
处理程序中运行的代码。
当您从.then()
或.catch()
获得新的承诺时,由于.then()
或.catch()
内部的代码尚未被调用,它将始终处于待处理状态(最初的承诺尚未致电给他们)。这些语句只是在原始诺言上注册处理程序。
当调用这些处理程序时,它们将确定新Promise的状态。如果它们返回纯值,则该新承诺将用该值解决。如果他们抛出,那新的诺言将被拒绝。如果他们返回承诺,则该新承诺将遵循从.then()
或.catch()
处理程序返回的该新承诺的最终状态,并且它将像返回的承诺一样解决或拒绝。 >