我正在尝试添加一个全局错误处理程序,以便可以捕获所有错误并向用户显示一些通知。
window.addEventListener("unhandledrejection", e => {
console.log("unhandledrejection", e);
});
window.addEventListener("error", e => {
console.log("error", 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>
);
}
代码沙箱位于此处:CodeSandbox
答案 0 :(得分:0)
您必须等待async函数返回的promise结果,否则错误将不会传播到全局侦听器。
但是异步功能仍然有可能误吞 错误。以并行异步功能为例。如果没有 等待(或返回)Promise.all([])调用的结果,任何错误 不会被传播。虽然parallelPromise示例似乎 简单,它根本不处理错误!这样做将需要 类似的返回Promise.all([])。
You can read more here in the MDN web docs.
在您的代码沙箱中,我可以通过重写asyncAction函数来捕获异步错误:
#use