加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

一文汇报你怎样优雅处理赏罚前端非常?

发布时间:2019-03-16 02:17:23 所属栏目:移动互联 来源:佚名
导读:前端一向是间隔用户最近的一层,跟着产物的日益完美,我们会越发注重用户体验,而前端非常却如鲠在喉,甚是烦人。 一、为什么要处理赏罚非常? 非常是不行控的,会影响最终的泛起功效,可是我们有充实的来由去做这样的工作。 1.加强用户体验; 2.长途定位题目

没有写 catch 的 Promise 中抛出的错误无法被 onerror 或 try-catch 捕捉到,以是我们务须要在 Promise 中不要健忘写 catch 处理赏罚抛出的非常。

办理方案: 为了防备有遗漏的 Promise 非常,提议在全局增进一个对 unhandledrejection 的监听,用来全局监听Uncaught Promise Error。行使方法:

  1. window.addEventListener("unhandledrejection", function(e){ 
  2. console.log(e); 
  3. }); 

我们继承来实行一下:

  1. window.addEventListener("unhandledrejection", function(e){ 
  2. e.preventDefault() 
  3. console.log('捕捉到非常:', e); 
  4. return true; 
  5. }); 
  6. Promise.reject('promise error'); 

可以看到如下输出:

一文汇报你怎样优雅处理赏罚前端非常?

那假如对 Promise 不举办 catch 呢?

  1. window.addEventListener("unhandledrejection", function(e){ 
  2. e.preventDefault() 
  3. console.log('捕捉到非常:', e); 
  4. return true; 
  5. }); 
  6. new Promise((resolve, reject) => { 
  7. reject('jartto: promise error'); 
  8. }); 

嗯,究竟证明,也是会被正常捕捉到的。

以是,正如我们上面所说,为了防备有遗漏的 Promise 非常,提议在全局增进一个对 unhandledrejection 的监听,用来全局监听 Uncaught Promise Error

增补一点:假如去掉节制台的非常表现,必要加上:

  1. event.preventDefault(); 

七、VUE errorHandler

  1. Vue.config.errorHandler = (err, vm, info) => { 
  2. console.error('通过vue errorHandler捕捉的错误'); 
  3. console.error(err); 
  4. console.error(vm); 
  5. console.error(info); 

八、React 非常捕捉

React 16 提供了一个内置函数 componentDidCatch,行使它可以很是简朴的获取到 react 下的错误信息

  1. componentDidCatch(error, info) { 
  2. console.log(error, info); 

除此之外,我们可以相识一下:error boundary
UI 的某部门引起的 JS 错误不该该粉碎整个措施,为了帮 React 的行使者办理这个题目,React 16 先容了一种关于错误界线(error boundary)的新见识。

必要留意的是: error boundaries 并不会捕获下面这些错误。

1.变乱处理赏罚器
2.异步代码
3.处事端的渲染代码
4.在 error boundaries 地区内的错误

我们来举一个小例子,在下面这个 componentDIdCatch(error,info) 里的类会酿成一个 error boundary

  1. class ErrorBoundary extends React.Component { 
  2. constructor(props) { 
  3. super(props); 
  4. this.state = { hasError: false }; 
  5.   
  6. componentDidCatch(error, info) { 
  7. // Display fallback UI 
  8. this.setState({ hasError: true }); 
  9. // You can also log the error to an error reporting service 
  10. logErrorToMyService(error, info); 
  11.   
  12. render() { 
  13. if (this.state.hasError) { 
  14. // You can render any custom fallback UI 
  15. return <h1>Something went wrong.</h1>; 
  16. return this.props.children; 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读