Javascript 全局捕获react应用程序中异步函数的错误

Javascript 全局捕获react应用程序中异步函数的错误,javascript,reactjs,error-handling,Javascript,Reactjs,Error Handling,我正在尝试添加一个全局错误处理程序,以便捕获所有错误并向用户显示一些通知 window.addEventListener(“unhandledrejection”,e=>{ console.log(“未处理的弹出”,e); }); addEventListener(“错误”,e=>{ 控制台日志(“错误”,e); }); 但这似乎无法捕获异步函数的错误: function App() { async function asyncAction() { throw new Error(

我正在尝试添加一个全局错误处理程序,以便捕获所有错误并向用户显示一些通知

window.addEventListener(“unhandledrejection”,e=>{
console.log(“未处理的弹出”,e);
});
addEventListener(“错误”,e=>{
控制台日志(“错误”,e);
});
但这似乎无法捕获异步函数的错误:

function App() {
  async function asyncAction() {
    throw new Error("async error"); // This error can't be caught globally
  }
  function syncAction() {
    throw new Error("sync error");
  }
  return (
    <div className="App">
      <button onClick={asyncAction}>async</button>
      <button onClick={syncAction}>sync</button>
    </div>
  );
}
函数应用程序(){
异步函数asyncAction(){
抛出新错误(“异步错误”);//无法全局捕获此错误
}
函数syncAction(){
抛出新错误(“同步错误”);
}
返回(
异步的
同步
);
}

代码沙盒在这里:

您必须等待异步函数返回的承诺结果,否则错误将不会传播到全局侦听器

然而,异步函数仍然有可能错误地吞咽 错误。以并行异步函数为例。如果没有 等待(或返回)承诺的结果。所有([])调用,是否有错误 不会被传播。而这个例子似乎 很简单,它根本不处理错误!这样做将需要一个 类似的退货承诺。全部([])

在您的代码沙盒中,我可以通过重写asyncAction函数来捕获异步错误:

async function asyncAction() {

let p = new Promise(()=>{throw new Error("async error"); });

p.then().catch();
}

您必须等待异步函数返回的承诺结果,否则错误将不会传播到全局侦听器

然而,异步函数仍然有可能错误地吞咽 错误。以并行异步函数为例。如果没有 等待(或返回)承诺的结果。所有([])调用,是否有错误 不会被传播。而这个例子似乎 很简单,它根本不处理错误!这样做将需要一个 类似的退货承诺。全部([])

在您的代码沙盒中,我可以通过重写asyncAction函数来捕获异步错误:

async function asyncAction() {

let p = new Promise(()=>{throw new Error("async error"); });

p.then().catch();
}
@JesperJohansson“错误边界不会捕获事件处理程序内的错误”。@JesperJohansson“错误边界不会捕获事件处理程序内的错误。”