我该如何处理异常?

时间:2015-03-26 00:01:12

标签: error-handling exception-handling reactjs

Angular有一个很棒的$exceptionHandler。对于react.js有没有这样的东西?

我想将错误记录到外部API。例子:

2 个答案:

答案 0 :(得分:16)

角度上没有魔法。如果存在未被捕获的错误,它会向上传播范围直到它到达窗口,然后发出错误事件 - 与没有反应的错误行为相同。

var App = React.createClass({
  render: function(){
    throw new Error("rawr!");
    return <div>Hello, world!</div>
  }
});

window.addEventListener('error', function(e){
  // e instanceof ErrorEvent
  console.error('caught the error: ' + e.message);
});

chrome console displaying the error

如果您查看跨浏览器支持,请更新此答案或在引文中添加评论。

您可以将其发送到控制台(默认情况下已经发生),而不是将其记录到任何您喜欢的位置。

与其他一些框架不同,未被捕获的错误始终是代码中的错误。它永远不会发生。

您可能还需要通过在链的末尾显式添加.catch(reportError)并检查它是TypeError或ReferenceError来对promise进行一些特殊处理。

答案 1 :(得分:-1)

虽然@FakeRainBrigand的答案为理解一般未被捕获的错误的机制提供了一个非常好的起点&#39;在Javascript中的报告机制,我觉得大多数应用程序都使用CDN来托管他们的JS包,你无法通过&#34; window.addEventListener(&#39; error&#39;,fn)&#34来捕获未捕获的错误;机构。

克服交叉原则限制

crossorigin属性添加到您的脚本代码中,以便您可以使用&#34; window.addEventListener(&#39; error&#39;,fn)&#34;来享受未捕获的错误。机构。

如果您无法绕过角色设置

React 16 :提供内置的错误处理机制。详细了解Error Boundaries in React here

React 15或以下:这里唯一可以捕获错误的方法是在每个渲染/组件周围添加try-catch块。 幸运的是,我们有一个npm模块 - react-guard,它通过修补React来完成我们的工作。