• 异常捕获


    /**
     * @param {String}  message    错误信息
     * @param {String}  source     出错文件
     * @param {Number}  lineno     行号
     * @param {Number}  colno      列号
     * @param {Object}  error      Error对象(对象)
     */
    window.onerror = function (message, source, lineno, colno, error) {
      console.log("捕获到异常:", { message, source, lineno, colno, error });
    };
    <script>
      function errorHandler(error) {
        console.log("捕获到静态资源加载异常", error);
      }
    </script>
    <script src="http://cdn.xxx.com/js/test.js" onerror="errorHandler(this)"></script>
    <link rel="stylesheet" href="http://cdn.xxx.com/styles/test.css" onerror="errorHandler(this)">
    
    <script>
        window.addEventListener('error', (error) => {
          console.log('捕获到异常:', error);
        }, true)
     </script>
    //Promise异常
    window.addEventListener("unhandledrejection", function (e) {
      e.preventDefault();
      console.log("捕获到 promise 错误了");
      console.log("错误的原因是", e.reason);
      console.log("Promise 对象是", e.promise);
      return true;
    });
    
    Promise.reject("promise error");
    new Promise((resolve, reject) => {
      reject("promise error");
    });
    new Promise((resolve) => {
      resolve();
    }).then(() => {
      throw "promise error";
    });
    //react捕获异常
    class ErrorBoundary extends React.Component {
      constructor(props) {
        super(props);
        this.state = { hasError: false };
      }
    
      componentDidCatch(error, info) {
        // 展示出错的UI
        this.setState({ hasError: true });
        // 将错误信息上报到日志服务器
        logErrorToMyService(error, info);
      }
    
      render() {
        if (this.state.hasError) {
          // 可以展示自定义的错误样式
          return <h1>Something went wrong.</h1>;
        }
        return this.props.children;
      }
    }
    //vue捕获异常
    Vue.config.errorHandler = (err, vm, info) => {
      console.error("通过vue errorHandler捕获的错误");
      console.error(err);
      console.error(vm);
      console.error(info);
    };
    
    
    // 异常一共七大类,处理时需分清是致命错误还是非致命错误。
    // 可疑区域增加 try-catch
    // 全局监控 JS 异常 window.onerror
    // 全局监控静态资源异常 window.addEventListener
    // 捕获没有 catch 的 Promise 异常用 unhandledrejection
    // Vue errorHandler 和 React componentDidCatch
    // Axios 请求统一异常处理用拦截器 interceptors
  • 相关阅读:
    [恢]hdu 2002
    [恢]hdu 2001
    [恢]hdu 2003
    [恢]hdu 1000
    ActionButton的处理流程 天龙packet
    ogre visibleflag
    Scaleform Gfx的Demo
    cegui 自定义控件
    PixWin
    在Ogre中加载自己的资源包
  • 原文地址:https://www.cnblogs.com/chenzxl/p/14442258.html
Copyright © 2020-2023  润新知