我最近完成了为纯 C API 中的所有函数制作异步版本,用 N-API 包装以与 JS/TS 作为 nodejs 插件一起使用。
我必须解决的最后一个问题是确保在 worker 执行结束时将 C POSIX 样式的错误(即返回的整数代码)正确传输到 JS(使用相应的字符串,我们都有一个枚举异常和错误消息列表)。
当被抛出时napi_throw_error
(就像我对所有调用的同步版本所做的那样),在 中napi_async_complete_callback
,这些异常从未在 JS 级别被捕获(我想这是因为它在不同的异步上下文中;我看到网上的人有类似的ajax 的问题)。相反,我选择将我的错误构造为napi_value
类型,并通过 napi_reject_deferred
. 这似乎具有预期的效果,即在执行try { await My_NapiWrapper_XYZ() } catch (ex) { ... }
.
所以我真的没有要解决的问题,但我很感兴趣。这些napi_throw_error
抛出的错误可能会去某个地方。虽然我不知道在哪里。napi_throw_error
应该在哪里寻找从 a引发的错误napi_async_complete_callback
?你能给出一个代码示例吗?