Node 12(v8)
我决定将Node更新为12.11。因此,在使用的某些节点模块中出现gyp编译错误。我对C ++有一定的经验,但是我从未使用过v8。我已经设法解决了与以前不建议使用的功能和现在已删除的功能有关的大多数错误,但是有一种我无法解决的问题:
v8::Local<v8::Object> obj = size->ToObject();
if(obj->Has(columns))
w->ws_col = obj->Get(columns)->Uint32Value();
if(obj->Has(rows))
w->ws_row = obj->Get(rows)->Uint32Value();
[ToObject()
已被删除,所以我想到了这个:
v8::Local<v8::Object> obj = Nan::To<v8::Object>(size).ToLocalChecked();
问题是没有v8::Object::Has(v8::Local<v8::String>&)
方法。如何使Has
呼叫与新版本兼容?
旧的ToObject()
的不推荐使用的替换是MaybeLocal<Object> v8::Value::ToObject(Local<Context> context)
;当然可以使用Nan
,但不是必需的。请注意,如果抛出异常且没有结果值,则.ToLocalChecked
将触发崩溃,例如如果在null
或undefined
上调用此函数。结果类型MaybeLocal
旨在使嵌入代码很明显需要对此进行检查,并适当地处理异常。
类似地,Has()
的未弃用版本是采用上下文参数的两个:Maybe<bool> v8::Object::Has(Local<Context> context, Local<Value> key)
和Maybe<bool> v8::Object::Has(Local<Context> context, uint32_t index)
。如果抛出异常,则它们返回的Maybe<bool>
为空(.IsNothing() == true
),否则为结果的bool
。