在 Async Javascript 函数中处理异常
Handling Exceptions in an Async Javascript function
在 C++ 中构建 "Process Orchestration Engine" 作为节点插件。根据生命周期,我从 C++ 调用各种用户提供的 Javascript 代码片段。这是一个典型的"message_in"方法;
async message_in(msg) {
// Do stuff
await supervisor->send_message(xxx);
// Do more stuff
}
我的问题是我想优雅地处理异常,而无需用户添加 try catch 块。目前,如果在上述方法中发生异常,(In Do stuff),promise 将被拒绝,Node 抱怨我没有处理它。
但在 C++ 方面我只能 "call" JS 方法,我看不到添加 catch() 处理程序的方法。
我不是特别想使用全局流程处理程序。
任何人都可以想出一种方法来避免节点警告,因为他们声称他们将在未来的版本中为此关闭进程。
当承诺被拒绝时,分配给该承诺的任何 .catch 处理程序都会被触发,您可以做什么:
async function message_in(msg) {
await (async () => {
// Do stuff
await supervisor->send_message(xxx)
// Do more stuff
})().catch((e) => {
return e; // or do sth sensible with the error
});
}
这确实会使您的方法有些臃肿,但您可以使用 function/method 装饰器 (https://www.sitepoint.com/javascript-decorators-what-they-are/)
将其提取出来
您可以很容易地附加处理程序:
Local<Value> res;
TryCatch try_catch(isolate);
if (fn->Call(...).ToLocal(&res)) {
if (res->IsPromise()) {
res.As<Promise>()->Catch(context, errorHandlerFunction);
}
} else {
// check try_catch
}
在 C++ 中构建 "Process Orchestration Engine" 作为节点插件。根据生命周期,我从 C++ 调用各种用户提供的 Javascript 代码片段。这是一个典型的"message_in"方法;
async message_in(msg) {
// Do stuff
await supervisor->send_message(xxx);
// Do more stuff
}
我的问题是我想优雅地处理异常,而无需用户添加 try catch 块。目前,如果在上述方法中发生异常,(In Do stuff),promise 将被拒绝,Node 抱怨我没有处理它。
但在 C++ 方面我只能 "call" JS 方法,我看不到添加 catch() 处理程序的方法。
我不是特别想使用全局流程处理程序。
任何人都可以想出一种方法来避免节点警告,因为他们声称他们将在未来的版本中为此关闭进程。
当承诺被拒绝时,分配给该承诺的任何 .catch 处理程序都会被触发,您可以做什么:
async function message_in(msg) {
await (async () => {
// Do stuff
await supervisor->send_message(xxx)
// Do more stuff
})().catch((e) => {
return e; // or do sth sensible with the error
});
}
这确实会使您的方法有些臃肿,但您可以使用 function/method 装饰器 (https://www.sitepoint.com/javascript-decorators-what-they-are/)
将其提取出来您可以很容易地附加处理程序:
Local<Value> res;
TryCatch try_catch(isolate);
if (fn->Call(...).ToLocal(&res)) {
if (res->IsPromise()) {
res.As<Promise>()->Catch(context, errorHandlerFunction);
}
} else {
// check try_catch
}