最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Node 12(v8)

运维笔记admin10浏览0评论

Node 12(v8)

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将触发崩溃,例如如果在nullundefined上调用此函数。结果类型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

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论