node.js Q promise不会通过拒绝处理程序传播异常
node.js Q promises does not propagate exception through rejection handler
我正在使用requestify进行一些HTTP请求。该模块内部使用其他模块,如HTTP、套接字等。它还使用Q promise。
requestify使用的模块可以异步抛出异常(例如,套接字模块可以抛出ECONNREFUSED)。每当抛出异常时,控制流都会脱离到我的进程的通用未捕获异常处理程序,并且不会传播到promise的错误/拒绝处理程序。
下面的代码是一个示例代码,它代表了这个问题。
问题-我有可能通过Q promise的拒绝处理程序来处理此类异常吗?
// sample code
var _inspect = require('util').inspect;
var _q = require('q');
function handle_uncaught_exception(ex) {
console.log(" Uncaught Exception: " + _inspect(ex));
process.exit(2);
}
process.on('uncaughtException', handle_uncaught_exception);
function foo_3rd_party_code() {
var d = _q.defer();
setTimeout(
function () {
throw new Error("TEST_EXCEPTION");
},
1000
);
return d.promise;
}
foo_3rd_party_code()
.then(
function (val) {
console.log("Promise Fullfilled: " + _inspect(val));
process.exit(0);
},
function (err) {
// it would be nice to see the TEST_EXCEPTION here.
console.log("Promise Rejected: " + _inspect(err));
process.exit(1);
}
);
foo_3rd_party_code
无法捕获或处理异常,因为它看不到异常。为此,必须使用promise的reject
方法。
function foo_3rd_party_code() {
var d = _q.defer();
setTimeout(
function () {
d.reject(new Error("TEST_EXCEPTION"));
},
1000
);
return d.promise;
}
相关文章:
- 未处理的拒绝MongoError:无法连接到MongoDB中的服务器
- NodeJS未处理的拒绝错误:Can't在发送标头后设置标头
- 蓝鸟中未经处理的拒绝
- $q:默认拒绝处理程序
- 拒绝执行内联事件处理程序,因为它违反了CSP.(沙盒)
- 返回Bluebird中被拒绝的承诺和onPossiblyUnhandledRejection处理程序
- 需要一种方法来系统地处理NodeJS项目中的错误/异常/拒绝
- rsvp.js 如何处理被拒绝的承诺和失败回调链
- 防止承诺触发全局“未处理的拒绝”事件
- 节点和续集的新手,并获得“未处理的拒绝类型错误:Vacation.create 不是一个函数”
- 角度 2 beta 即 10 “潜在未处理的拒绝 [3] 语法错误:预期”
- 承诺拒绝错误 - 未处理的拒绝错误:已关闭
- IE9拒绝处理XML响应
- 未处理的拒绝原因(应为空)
- node.js Q promise不会通过拒绝处理程序传播异常
- 异步承诺中未处理的承诺拒绝
- 可能的未处理承诺拒绝(id:0): undefined不是一个对象
- 未处理的拒绝错误:发送后不能设置标头
- 如何处理“拒绝设置不安全标头:连接”
- 并行运行承诺,但单独处理拒绝