Как я должен выбросить ошибку с числовым кодом в NAN 1.x?

В NAN 1.9, NanThrowError(const char *msg, const int errorNumber) метод устарел, и похоже, что эквивалентный метод отсутствует в NAN 2.0. Есть ли другой способ получить такую ​​же функциональность с помощью NAN, или он просто исчез?

0

Решение

Это было удалено, потому что это было ненужно, легко осуществлено как необходимо.

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));
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 на этом объекте исключения. Вы можете использовать внутреннюю реализацию выше в качестве руководства.

1

По вопросам рекламы [email protected]