"an empty MaybeLocal" 是什么意思?

what does "an empty MaybeLocal" mean?

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

文档说 "If an API method returns a MaybeLocal<>, the API method can potentially fail either because an exception is thrown, or because an exception is pending, e.g. because a previous API call threw an exception that hasn't been caught yet, or because a TerminateExecution exception was thrown. In that case, an empty MaybeLocal is returned."

这是否大致相当于返回一个空指针,但使用一个简单的 class 可以检测到它?

(这里是 V8 开发人员。)是的,"empty 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.
}