在异步Javascript函数中处理异常 在C++中构建一个“进程协调引擎”作为节点附加。从C++中,我根据生命周期调用各种用户提供的JavaScript代码片段。这里是一个典型的“message_in”方法

在异步Javascript函数中处理异常 在C++中构建一个“进程协调引擎”作为节点附加。从C++中,我根据生命周期调用各种用户提供的JavaScript代码片段。这里是一个典型的“message_in”方法,javascript,async-await,v8,Javascript,Async Await,V8,我的问题是,我想优雅地处理异常,而不需要用户添加try-catch块。当前,如果在上述方法中(在Do stuff中)发生异常,则promise将设置为rejected,节点会因为我没有处理它而抱怨我 但是在C++方面,我只能调用“JS”方法,我看不出添加CAMCHER()处理程序的方法。 我并不特别想使用全局进程处理程序 任何人都可以想出一种方法来避免节点警告,因为他们声称在将来的版本中将为此关闭进程。当承诺被拒绝时,会触发分配给该承诺的捕获处理程序,您可以做什么: async函数消息_in(

我的问题是,我想优雅地处理异常,而不需要用户添加try-catch块。当前,如果在上述方法中(在Do stuff中)发生异常,则promise将设置为rejected,节点会因为我没有处理它而抱怨我

<>但是在C++方面,我只能调用“JS”方法,我看不出添加CAMCHER()处理程序的方法。 我并不特别想使用全局进程处理程序


任何人都可以想出一种方法来避免节点警告,因为他们声称在将来的版本中将为此关闭进程。

当承诺被拒绝时,会触发分配给该承诺的捕获处理程序,您可以做什么:

async函数消息_in(msg){
等待(异步()=>{
//做事
等待主管->发送消息(xxx)
//多做事
})()捕获((e)=>{
返回e;//或对该错误进行合理处理
});

}
您可以非常轻松地连接处理程序:

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
}
localres;
TryCatch try_catch(隔离);
如果(fn->调用(…).ToLocal(&res)){
如果(res->IsPromise()){
res.As()->Catch(上下文,errorHandlerFunction);
}
}否则{
//检查并尝试捕捉
}

我的问题是,我想处理在等待调用之前发生的异常。所以,在队伍中,做一些事情。这似乎会导致node在方法中查找附加到消息_的catch处理程序,当然,没有。好的,明白了-我已经更新了我的答案以反映这一点,从长远来看,最好创建一个decorator来使用它。它解决了我的问题,谢谢!然而,如果发生错误,我真正想回报的是被拒绝的承诺。你知道我该怎么做吗?在catch语句中,你可以返回一个被明确拒绝的承诺,因此:
返回承诺。拒绝(e)
。不幸的是,当我这样做时,我返回到节点,抱怨一个未经处理的PromisejectedWarning-鸡和蛋:-(节点错误出现在fn->Call processing中,因此在调用返回后附加处理程序似乎已经太晚了。
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
}