Promise resolved状态解析:‘操作无效果’具体指什么?
关于Promise resolved命运中“无效果”的具体解释
这里的“无效果”指的是:当Promise处于resolved命运时,任何后续尝试调用resolve()或reject()来改变这个Promise的状态或最终结果的操作,都会被直接忽略,不会对该Promise的状态、走向或绑定的回调函数产生任何影响。
具体可以分为三种场景理解:
场景1:Promise已处于fulfilled状态
当一个Promise已经成功完成(fulfilled),后续再调用resolve()传入新值,或者调用reject()传入错误,都不会改变它的fulfilled状态,绑定的then回调依然只会执行最初的成功结果。const fulfilledPromise = Promise.resolve('完成'); fulfilledPromise.then(res => console.log(res)); // 输出:完成 // 后续操作完全无效 fulfilledPromise.resolve('新结果'); fulfilledPromise.reject('出错'); // 不会触发新的回调,Promise状态依然保持fulfilled场景2:Promise已处于rejected状态
同理,当Promise已经失败(rejected),后续的resolve()或reject()操作都无法改变它的rejected状态,绑定的catch回调也只会响应最初的错误。const rejectedPromise = Promise.reject('失败'); rejectedPromise.catch(err => console.log(err)); // 输出:失败 // 后续操作完全无效 rejectedPromise.resolve('修复'); rejectedPromise.reject('新错误'); // Promise状态依然保持rejected,不会触发新的catch回调场景3:Promise已锁定跟随另一个Promise
当用resolve()把当前Promise与另一个Promise关联时,当前Promise的命运就变为resolved,它的最终结果会完全跟随目标Promise的状态。此时后续的resolve()或reject()操作都无法打破这种绑定,当前Promise依然会等待目标Promise的结果。const targetPromise = new Promise(res => setTimeout(() => res('目标完成'), 1000)); const lockedPromise = new Promise(res => res(targetPromise)); // 后续操作无效,lockedPromise依然跟随targetPromise lockedPromise.resolve('强制结果'); lockedPromise.reject('强制失败'); lockedPromise.then(res => console.log(res)); // 1秒后输出:目标完成
简单来说,resolved命运就相当于给Promise的结果路径上了锁,一旦上锁,任何试图改道的操作都会被无视,Promise只会沿着已经确定的路径走到最终状态。
内容的提问来源于stack exchange,提问作者user19481364
相关产品推荐
相关产品推荐

