A闪的 BLOG 技术与人文
如果发生错误, V8 会抛出异常. 比如, 当一个脚本或函数试图读取一个不存在的属性时, 或者一个不是函数的值被当作函数进行调用执行时.
如果一个操作不成功, V8 将返回一个空的 handle. 因此我们应该在代码中检查返回值是否是一个空的 handle, 可以使用 Local 类的公共成员函数 isEmpty() 来检查 handle 是否为空.
我们也可以像以下示例一样 Try Catch 代码中发生的异常:
TryCatch trycatch(isolate);
Local<Value> v = script->Run();
if (v.IsEmpty()) {
Local<Value> exception = trycatch.Exception();
String::Utf8Value exception_str(exception);
printf("Exception: %s\n", *exception_str);
// ...
}
如果 value 以一个空 handle 返回, 而你没有 TryCatch 它, 你的程序挂掉, 反之则可以继续执行.
v8::Exception
通过使用消息调用相应的错误对象构造函数来创建新的错误对象。
isolate->ThrowException(v8::Exception::Error(
v8::String::NewFromUtf8(isolate, "File opening failed")
.ToLocalChecked()));
v8::TryCatch trycatch(isolate);
v8::MaybeLocal<v8::Value> v = script->Run(context);
if (v.IsEmpty()) {
v8::Local<v8::Value> exception = trycatch.Exception();
v8::String::Utf8Value exception_str(isolate, exception);
std::cout << *exception_str << std::endl;
}