0

NAN 1.9中,该NanThrowError(const char *msg, const int errorNumber)方法已被弃用,看起来 NAN 2.0 中不存在等效方法。是否有另一种方法可以使用 NAN 获得相同的功能,或者它完全消失了?

4

2 回答 2

1

它被删除是因为它是不必要的,可以根据需要轻松实施。

inline v8::Local<v8::Value> makeErrorWithCode(const char *msg, int code) {
    NanEscapableScope();
    v8::Local<v8::Object> err = NanError(msg).As<v8::Object>();
    err->Set(NanNew("code"), NanNew<v8::Int32>(code));
    return NanEscapeScope(err);
}

return NanThrowError(makeErrorWithCode("message", 1337));
于 2015-08-05T23:11:38.413 回答
1

如果您查看nan.h 问题中链接的版本,您会发现不推荐使用的方法只会创建一个 V8 异常并抛出:

NAN_DEPRECATED NAN_INLINE void NanThrowError(
  const char *msg
, const int errorNumber
) {
    NanThrowError(Nan::imp::E(msg, errorNumber));
}

namespace Nan { namespace imp {
    NAN_INLINE v8::Local<v8::Value> E(const char *msg, const int errorNumber) {
      NanEscapableScope();
      v8::Local<v8::Value> err = v8::Exception::Error(NanNew<v8::String>(msg));
      v8::Local<v8::Object> obj = err.As<v8::Object>();
      obj->Set(NanNew<v8::String>("code"), NanNew<v8::Int32>(errorNumber));
      return NanEscapeScope(err);
    }
  }  // end of namespace imp
}  // end of namespace Nan

我不知道他们为什么在 Github 上的更改日志中没有提及此更改。V8 引擎可能会发生一些变化,这使得很难确定一个好的默认错误对象。

我认为目前最好的选择是在你的类上编写一个方法,根据消息和错误代码创建一个新的 V8 异常并调用NanThrowError该异常对象。您可以使用上面的内部实现作为指导。

于 2015-08-03T18:57:16.060 回答