【发布时间】:2016-07-26 17:33:40
【问题描述】:
我遇到了在 bluebird promise 中抛出错误的问题。取以下代码:
var Promise = require('bluebird');
var domain = require('domain');
var problem = function() {
return new Promise(function(resolve, reject){
reject(new Error('Oops!'));
});
};
domain.create()
.on('error', function(e){
console.log("Caught Error " + e.message)
process.exit(1);
})
.run(function() {
problem().done();
});
我希望在控制台中看到Caught Error Oops!。但是,似乎该错误未在域内捕获,并且我在控制台中看到了致命错误和堆栈跟踪。
有人知道为什么吗?
【问题讨论】:
-
域已弃用,您不应使用它们。
-
这不是很有帮助。是的,我知道域名将来可能会被替换,但是在要求弃用它们近 2 年后的今天,它们仍然是核心。域仍在等待弃用,因为尚未实现任何东西来取代它们提供的非常具体的功能。
-
这是 bluebird 的问题,Q 库函数的承诺符合预期。
-
不要混合使用两种技术。承诺和域可以处理您的错误,但您应该选择其中之一。您看不到错误消息,因为 bluebird 会为您处理它。当 Promise 链中出现任何错误或您因错误拒绝时,您可以在
catch处理程序中捕获错误并在那里处理错误。
标签: javascript node.js promise bluebird node.js-domains