- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
,则 API 方法可能会失败,因为抛出了异常,或-6ren">
我开始使用 Nan 使用 nodejs 插件,并且正在阅读有关 MaybeLocal 的信息。
文档说“如果 API 方法返回 MaybeLocal<>,则 API 方法可能会失败,因为抛出了异常,或者因为异常正在等待处理,例如,因为先前的 API 调用抛出了一个尚未发生的异常尚未被捕获,或者因为抛出了 TerminateExecution 异常。在这种情况下,将返回一个空的 MaybeLocal。”
这是否大致相当于返回一个空指针,但使用一个可以检测到它的简单类?
最佳答案
(这里是 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.
}
关于node.js - "an empty MaybeLocal"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47114090/
我开始使用 Nan 使用 nodejs 插件,并且正在阅读有关 MaybeLocal 的信息。 文档说“如果 API 方法返回 MaybeLocal<>,则 API 方法可能会失败,因为抛出了异常,或
我正在尝试将一个工作中的 Electron 应用程序从 5 升级到 6,它引入了一个重大变化...... error C2664: 'v8::MaybeLocal v8::Object::Get(v8
基本上我想检查传递给构造函数的参数,并在参数不满足特定条件时抛出异常。 我的 C++ 对象继承了 node::ObjectWrap。 v8::Persistent SomeKlass::const
我是一名优秀的程序员,十分优秀!