Promise状态:resolved与fulfilled——thenable对象是否始终被resolved?
关于Promise then()链中thenable对象的解析疑问
在then()链中出现的thenable对象始终会被resolved
——onFulfilled处理程序永远不会接收到thenable对象,且任一处理程序返回的thenable对象在传递给下一个处理程序前始终会被resolved。这是因为在构造新Promise时,executor传入的resolve和reject函数会被保存,当前Promise敲定后,对应的函数会被调用并传入兑现值或拒绝原因。解析逻辑来自Promise()构造函数传入的解析器函数。
你提到Promise并非始终处于resolved状态,也可能被rejected,这点完全正确。但MDN这段表述并没有错误,它的核心意思是:
- 当then()链中出现thenable对象时,JS引擎会自动对这个thenable进行解析(执行它的then方法),无论这个thenable最终是兑现还是拒绝,都会被处理后再传递给下一个then的处理函数。
- 这里的"resolved"不是指Promise最终的状态是resolved(兑现),而是指对thenable对象的解析过程——JS会把thenable包装成标准Promise,等待它的状态敲定,再把结果(兑现值或拒绝原因)传递下去。
- 举个例子:如果某个onFulfilled返回一个会被reject的thenable,那么下一个then的onRejected会接收到对应的拒绝原因,而不是这个thenable本身。这就是文档说的"始终会被resolved"的含义——指解析过程一定会发生,而非结果一定是resolved状态。
内容的提问来源于stack exchange,提问作者jwa
相关产品推荐
相关产品推荐

