为什么返回polly.resolve()内部``然后造成两个承诺创造而不是一个



实际上,我不知道如何在真正的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原因(。

最新更新