在NAN 1.9中,该NanThrowError(const char *msg, const int errorNumber)
方法已被弃用,看起来 NAN 2.0 中不存在等效方法。是否有另一种方法可以使用 NAN 获得相同的功能,或者它完全消失了?
问问题
430 次
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 回答