我正在使用Nan开始使用nodejs插件,并且正在阅读有关MaybeLocal的内容。
文档说"如果API方法返回MaybeLocal<>,则API方法可能会因为抛出异常或因异常处于待决状态而失败,例如因为先前的API调用引发了尚未被捕获的异常,或者因为抛出了TerminateExecution异常。在这种情况下,返回一个空的MaybeLocal。"
这大致相当于返回一个空指针但是有一个可以检测到它的简单类吗?
答案 0 :(得分:4)
(V8开发人员在这里。)是的,“空的MaybeLocal”本质上是一个指针,可以是nullptr
并强制代码检查这种情况。
背景是,由于JavaScript的性质,V8的许多API操作都可能(有些意外)失败:任何JavaScript执行时,JavaScript代码都可能抛出异常。即使读取对象属性也可以调用getter。我们从经验中学到,编写正确检查所有这些的客户端代码非常困难,所以现在V8的API主要基于MaybeLocal
,它可以帮助您找到需要nullptr
检查的所有位置 - 或.IsEmpty()
检查,因为它们在MaybeLocal
世界中被调用。
如果您可以保证MaybeLocal
不能为空,则可以使用.ToLocalChecked()
,如果MaybeLocal
为空,则Local<Value> value;
if (maybe_value.ToLocal(&value)) {
// Do stuff with {value}.
} else {
// Handle error. If you have a TryCatch, it should
// have caught an exception.
}
会崩溃。否则,常见的模式是:
adb