是什么"空的MaybeLocal"意思?

时间:2017-11-04 18:26:26

标签: node.js v8

我正在使用Nan开始使用nodejs插件,并且正在阅读有关MaybeLocal的内容。

文档说"如果API方法返回MaybeLocal<>,则API方法可能会因为抛出异常或因异常处于待决状态而失败,例如因为先前的API调用引发了尚未被捕获的异常,或者因为抛出了TerminateExecution异常。在这种情况下,返回一个空的MaybeLocal。"

这大致相当于返回一个空指针但是有一个可以检测到它的简单类吗?

1 个答案:

答案 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