在v8中将异常作为字符串抛出

时间:2018-08-22 14:47:23

标签: javascript v8

在我们的应用程序中,我正在如下构造一个异常对象:

auto exception = v8::Object::New(isolate_);
exception->Set(code_name, code_value);

使用以下调用引发此异常:isolate_->ThrowException(exception);

在控制台和日志中,当我们打印异常时,我们看到一个对象而不是异常消息。下面是看到的输出:

[object Object]

我们如何将异常消息视为字符串而不是对象?

1 个答案:

答案 0 :(得分:0)

使用Java脚本,您可以使用JSON.stringify(exception)将异常打印到控制台。因此,您的Javascript代码如下所示:

try {
    ...
} catch(err) {
    console.log(JSON.stringify(err));
}

然后您应该在控制台中将整个对象视为一个字符串,如下所示:

{ "message": "An error occurred.", "code": 123 }

有了这些信息,您可以轻松地在异常对象内找到消息(和其他信息)。

从C ++ ,您还可以调用JSON.stringify()

Handle<Object> json = Context::GetCurrent()->Global()->Get(String::New("JSON"))->ToObject();
Handle<Function> stringify = Handle<Function>::Cast(json->Get(String::New("stringify")));

然后您可以使用异常对象作为参数来调用该函数,如下所示:

stringify->Call(json, 1, exception);