1

我最近完成了为纯 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?你能给出一个代码示例吗?

4

1 回答 1

2

不,他们哪儿也不去。这是我刚刚与他们一起打开的错误:

https://github.com/nodejs/node/issues/41377

在异步回调中处理异常存在一个普遍问题。通常,它们无法被捕获并会导致程序终止,但 Node 的开发人员已决定尽可能保持其运行。

于 2022-01-03T14:40:42.513 回答