为什么unhandledrejection事件不能在React中捕获一些错误?

时间:2018-12-27 04:42:15

标签: javascript reactjs babeljs create-react-app

unhandledrejection在使用creat-react-app构建项目时无法捕获某些错误。

Example

window.addEventListener("unhandledrejection", function(e) {
  console.log(e);
  alert(e.reason);
});

function onclick() {
  Promise.resolve().then(() => {
    abcd(); // not alert
    // throw "abcd"; // alert
  });
}

function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
      <button onClick={onclick}>error</button>
    </div>
  );
}

1 个答案:

答案 0 :(得分:0)

您可以兑现被拒绝的承诺。

someFunctionReturnsPromise()
.then(resolvedValue => { /* do stuff */ })
.then(anotherResolvedValue => { /* do more stuff */ })
.catch(error => { /* handle any rejected promises here */ })
.finally(() => { /* you can do stuff here regardless of promise resolution */ });

Handled Promise Exception

尽管,我现在意识到您在问为什么为unhandledrejection添加一个侦听器通常不会捕获错误。它实际上起作用,并捕获了abcd()引发的未定义函数错误。

Unhandled event handler responding to promise rejection

请注意,事件unhandledrejection不支持通用浏览器,实际上,Chrome 49+仅支持