所以基本上问题是Q吞噬了我的异常,这些异常并不是要拒绝承诺,而是尽早使应用程序崩溃,以便我知道究竟是什么破坏了。
我知道我可以(并且可能应该)在链的末尾使用done
方法,但实际上是一个痛苦的跟踪链末端。它没有多大帮助,因为它不会阻止Q捕获它,一旦缓存异常就会丢失它的堆栈跟踪。
是否有一种方法可以在抛出异常时提前崩溃,而不是将拒绝传播到链上,希望在结束时完成?
答案 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
要好得多。