我正在尝试捕获node-opencv(本机绑定)抛出的错误,而不是崩溃进程。
https://github.com/peterbraden/node-opencv
我尝试使用try{}catch(){}
块并且使用process.on('uncaughtException', function (exception) {});
都没有任何效果,但在抛出错误时进程仍然崩溃。
示例:libc++abi.dylib: terminate called throwing an exception
这个问题指的是任何被抛出的opencv错误,而不是特别错误。
我可以将所有node-opencv放入他们自己的进程中 - 然后将其作为主进程的子进程运行。当它崩溃,重新启动它并继续前进?
答案 0 :(得分:-1)
您可以使用domain
域提供了一种处理多个不同IO操作的方法 单组。如果注册了任何事件发射器或回调 域发出错误事件,或抛出错误,然后域 将通知对象,而不是丢失错误的上下文 在process.on(' uncaughtException')处理程序中,或导致程序 立即退出并显示错误代码。
http://snmaynard.com/2012/12/21/node-error-handling/
http://benno.id.au/blog/2011/08/08/nodejs-exceptions
另一种选择是使用node.js提供的事件系统。那 这是我们接下来要看的内容,因为它是node.js在内部使用的内容。我们 将改变我们的代码,以便y发出一个myerror事件 而不是异常冒泡。
var events = require('events')
emitter = new events.EventEmitter()
function y(arg, callback) {
if (arg === 1) {
x()
callback()
} else {
function onTick() {
try {
x()
} catch(err) {
emitter.emit('myerror', err)
return
}
callback()
}
process.nextTick(onTick)
}
}
节点代码非常特殊地处理被称为错误的事件。来自event.js中的emit代码:
if (type === 'error') {
if (!this._events || !this._events.error ||
(isArray(this._events.error) && !this._events.error.length))
{
if (arguments[1] instanceof Error) {
throw arguments[1]; // Unhandled 'error' event
} else {
throw new Error("Uncaught, unspecified 'error' event.");
}
return false;
}
}