从Q承诺中破坏应用程序而不是通过一系列承诺传播拒绝?

时间:2015-04-26 01:37:55

标签: javascript promise q

所以基本上问题是Q吞噬了我的异常,这些异常并不是要拒绝承诺,而是尽早使应用​​程序崩溃,以便我知道究竟是什么破坏了。

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

是否有一种方法可以在抛出异常时提前崩溃,而不是将拒绝传播到链上,希望在结束时完成?

3 个答案:

答案 0 :(得分:2)

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

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

只要没有明确处理异常(通过catch),这将导致进程退出。这结束了承诺调试问题的长期传奇。 .done的日子已经过去了。

确保获得Q 1.30,6分钟前发布:D

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

一个例子:

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

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