处理异步Javascript函数中的异常

问题描述 投票:0回答:2

在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 ++方面我只能“调用”JS方法,我看不到添加catch()处理程序的方法。

我不特别想使用全局流程处理程序。

任何人都可以想到避免Node警告的方法,因为他们声称他们将在未来版本中关闭此过程。

javascript async-await v8
2个回答
1
投票

如果拒绝承诺,则会触发分配给该承诺的任何.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
  });
}

这确实给你的方法带来了一些膨胀,但你可以用函数/方法装饰器(https://www.sitepoint.com/javascript-decorators-what-they-are/)来提取它


0
投票

您可以非常轻松地附加处理程序:

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
}
© www.soinside.com 2019 - 2024. All rights reserved.