gpt4 book ai didi

javascript - 什么时候需要返回嵌套的 Promise?

转载 作者:行者123 更新时间:2023-12-03 00:40:33 25 4
gpt4 key购买 nike

当链接多个 then 语句时,我很难理解何时需要将值返回到下一个 then 语句以及何时自动传递。 (对我来说)困惑在于当我在 then 语句中有一个 promise 与没有的时候。

这是在 Node 环境中 - 一个 Express 应用(更具体地说,是由 HTTP 请求触发的 Firebase 函数) - 所以我最终会 res.send() 一些值。

// Do I need to return mainFunction()?
mainFunction()
.then(resultOfMyFunction => {
// I want the next "then" to wait for the response from this block
// Do I have to return asyncFunction() or just the value below?
asyncFunction().then(resultOfPromise => {
// Do I return resultOfPromise?
}).catch(error => {
// If I return this error, will it go to the mainFunction catch block?
return error
})
}).then(resultOfPromise => {
// This is blocking, so the next "then" should wait for the value
return synchronousFunction(resultOfPromise)
}).then(resultOfSynchronousFunction => {
// End of function - do I need to return resultOfSynchronousFunction?
}).catch(error => {
// Do I need to return error?
})

我知道我们不应该嵌套 promise ,但是当您需要链接多个不同的数据库调用(其中每个调用都是一个 promise 并且您需要等待来自一个的数据来调用该数据库)时,Firebase 并没有真正为我们提供选择。接下来。

最佳答案

The confusion (for me) is when I have a promise inside a then statement vs not.

每当您在 then 或异步函数中有一个 Promise 时,您必须返回它。否则,拒绝(在异步函数和 promise 中抛出的错误)会被吞噬并最终陷入全局钩子(Hook)中,而不会给调用您的代码的任何人提供处理错误的机会。

同步函数没有这样的限制 - 仅当您想重用其返回值时返回同步代码才重要,因为抛出的错误由 then 自动处理。

  // If I return this error, will it go to the mainFunction catch block?

Promise 确实没有什么神奇之处。返回值是错误/成功(拒绝/完成)状态在调用之间传播的方式,因此如果您不返回该值 - mainFunction 将不会转到其 catch block 。

如果您希望它转到其 catch block - 返回值需要是最终拒绝的 promise - 为此您需要重新抛出内部 .catch block 中的错误或删除整个 .catch 都来自那里。

关于javascript - 什么时候需要返回嵌套的 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53484355/

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