gpt4 book ai didi

javascript - Promise 是否捕获了太多错误?

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:27 24 4
gpt4 key购买 nike

我正在 doc 中按照这种风格编写 promise :

Q.fcall(promisedStep1)
.then( promise 的Step2)
.then( promise 的Step3)
.then( promise 的Step4)
.then(函数(值4){
//用 value4 做一些事情
})
.catch(函数(错误){
//处理上述所有步骤中的任何错误
})
。完毕();

catch 子句将捕获任何错误,包括拼写错误。然而,根据nodejs dos:

By the very nature of how throw works in JavaScript, there is almost never any way to safely "pick up where you left off", without leaking references, or creating some other sort of undefined brittle state. The safest way to respond to a thrown error is to shut down the process.

如果我们以回调风格而不是 Promise 风格编写代码,某些类型的错误将会抛出
这真让我困惑。在 Promise 中编写时如何避免引用泄漏。

谢谢~

最佳答案

该示例展示了良好的 Promise 链,包括使用 .done() 来确保任何未处理的异常都从 Promise 链抛出到外部应用程序。就引用和错误处理而言: promise 链仅保证错误将被转发到 .catch 回调。如果抛出错误时无法清理状态 - 那么你就不走运了。例如

Q.fncall(function firstStep() {
var fs = open file reference
foo.bar; // generates ReferenceError
}).then(function somethingElse() {
...
}).catch(function (err) {
// we have caught ReferenceError
// but we cannot clean up open fs reference!
}).done();

我们捕获了错误,但 catch 处理程序无法关闭 fs 引用。这就是说,即使有 promise ,我们也必须考虑如何在发生错误时清理资源。

关于javascript - Promise 是否捕获了太多错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26499244/

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