实际上,我不知道如何在真正的Promise Super Class上检查一下,因此我正在使用将其扩展的类测试。但在我看来,结果是相同的。
class PromisePlus extends Promise {
constructor (handler) {
super(handler)
console.log('new promise created')
}
}
new PromisePlus((resolve, reject) => {
resolve()
}).then(() => {
return 'GOOD'
}).then(msg => {
console.log(msg)
})
打印"创建的新承诺" 3次
new PromisePlus((resolve, reject) => {
resolve()
}).then(() => {
return PromisePlus.resolve('BAD')
}).then(msg => {
console.log(msg)
})
打印"创建的新承诺" 5次。
在then
处理程序中返回新承诺的结果相同的结果
new PromisePlus((resolve, reject) => {
resolve()
}).then(() => {
return new PromisePlus((resolve, reject) => {
resolve('BAD')
})
}).then(msg => {
console.log(msg)
})
显然,PromisePlus.resolve()
创造了新的承诺,但是为什么then
返回PromisePlus.resolve()
会导致更多额外的承诺创建?
为什么在内部返回
PromisePlus.resolve()
,然后再导致一个额外的承诺创建?
因为当您从then
回调中返回承诺时,确实会等待解决外部承诺(从.then()
返回的承诺(。为了等待这个内在的承诺,.then(…)
被召唤了 - 此呼叫也确实创造了一个新的承诺。
(是的,所有这些都非常低效,这可能是应避免承诺子类的#1原因(。