gpt4 book ai didi

javascript - 为什么在 `then` 内返回 Promise.resolve() 会导致创建两个 promise 而不是一个?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:40:49 24 4
gpt4 key购买 nike

实际上,我不知道如何在真正的 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)
})

打印'new promise created' 3次

new PromisePlus((resolve, reject) => {
resolve()
}).then(() => {
return PromisePlus.resolve('BAD')
}).then(msg => {
console.log(msg)
})

打印“new promise created”5 次。

与在 then 处理程序中返回新 Promise 的结果相同

new PromisePlus((resolve, reject) => {
resolve()
}).then(() => {
return new PromisePlus((resolve, reject) => {
resolve('BAD')
})
}).then(msg => {
console.log(msg)
})

显然,PromisePlus.resolve() 创建了一个新的 promise,但是为什么在 then 中返回 PromisePlus.resolve() 会导致多一个额外的 promise 创造?

最佳答案

Why does returning PromisePlus.resolve() inside then cause one more extra promise creation?

因为当您从 then 回调中返回一个 promise 时,它确实会等待解析外部 promise (从 .then() 返回的 promise )。为了等待这个内在的 promise ,.then(…) 被调用 - 这个调用也创建了一个新的 promise 。

(是的,所有这些都非常低效,这可能是应该避免 promise 子类化的第一个原因)。

关于javascript - 为什么在 `then` 内返回 Promise.resolve() 会导致创建两个 promise 而不是一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49985926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com