В NAN 1.9, NanThrowError(const char *msg, const int errorNumber)
метод устарел, и похоже, что эквивалентный метод отсутствует в NAN 2.0. Есть ли другой способ получить такую же функциональность с помощью NAN, или он просто исчез?
Это было удалено, потому что это было ненужно, легко осуществлено как необходимо.
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));
Если вы посмотрите на версию 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
на этом объекте исключения. Вы можете использовать внутреннюю реализацию выше в качестве руководства.