5

我正在尝试捕获 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 放入他们自己的进程中 - 然后将其作为我的主进程的子进程运行。当它崩溃时,重新启动它并继续?

4

1 回答 1

-1

你可以使用

域提供了一种将多个不同的 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 中的发出代码:

  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;
    }
  }
于 2013-09-15T06:44:13.773 回答