gpt4 book ai didi

javascript - 如何用回调包装 promise ?

转载 作者:行者123 更新时间:2023-12-03 05:15:02 25 4
gpt4 key购买 nike

在我工作的公司,目前一切都是通过回调完成的。我们开始编写带有大代码所依赖的 promise 的小组件。我们开始与他们发生麻烦。

function getSomething() {
return Promise.resolve('hello')
}

function test(cb) {
getSomething()
.then(string => {
a.s
cb(null, string)
}, error => cb(error))
}

test((error, result) => {
console.log(error)
console.log(result)
a.s
})

这是问题的一个简单示例。在此代码中,由于 a 不存在,它将引发警告 UnhandledPromiseRejectionWarning 并终止该进程。控制台日志永远不会到达。

背后的逻辑是,如果发生错误,它将触发 catch 回调。

function test(cb) {
getSomething()
.then(string => {
// a.s
cb(null, string)
}, error => cb(error))
.catch(error => cb(error))
}

有人建议我在 promise 链末尾使用显式 catch。问题是如果在回调中抛出错误,回调将触发两次。

感谢您的帮助。

最佳答案

两者之间有细微的差别

.then(onFulfilled, onRejected)

.then(onFullfilled)
.catch(onRejected)

第一个无法捕获 onFullFilled 回调中抛出的错误,而第二个则可以。因此,您可能不应该在 then 阶段使用 onRejected 回调,而是像在第二个代码段中那样链接 .catch()

关于javascript - 如何用回调包装 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41644040/

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