从 Q 承诺中使应用程序崩溃,而不是通过承诺链传播拒绝



所以基本上问题是Q吞下了我的异常,这些异常不是为了拒绝承诺,而是为了尽早使应用程序崩溃,以便我知道到底是什么被破坏了。

我知道我可以(并且可能应该)在链的末端使用done方法,但是跟踪链端确实很痛苦。而且它没有多大帮助,因为它不会阻止 Q 捕获它,并且一旦缓存异常就会丢失它的堆栈跟踪。

有没有办法在抛出异常时提前崩溃,而不是将拒绝传播到链上,希望在它结束时完成?

是的,所以我的 Q PR 刚刚被合并,你现在可以这样做:

process.on("unhandledRejection", function(err, promise){
    throw err; // terminate with error if a `.catch` is not attached
});

这将导致进程在未显式处理异常时退出(通过 catch )。这结束了用承诺调试问题的漫长传奇。.done的日子已经一去不复返了.

只要确保得到 Q 1.30,6 分钟前发布:D

您正在寻找process.exit(1)(或任何其他退出代码),它将立即终止进程而不会引发异常。

实现此目的的一种方法是推迟 promise 回调的实际执行。这将强制函数进入事件队列,并且调用函数不会捕获此错误。

举个例子:

try {
    setTimeout(function () {
        throw new Error('Not caught');
    });
} catch (e) {
    console.log(e);
}

但是,我不确定这是否比仅使用.done要好得多。

最新更新