react 异常捕获

原文链接: react 异常捕获

上一篇: ts 实现fib

下一篇: ts-toolbelt Boolean 模块

参考

https://zhuanlan.zhihu.com/p/259571403

这些人的脑洞可真大...

用户的执行函数

      const f = () => JSON.parse();
      const test = () => {
        console.log("test 1");
        f();
        console.log("test 2");
      };

使用try-catch

up-e3e73d6110eddcbd7983ea9d716799745e2.png

必须开启两个才能在异常位置停下来

up-d5dc03eff8016bd1069c1d035e0d775383a.png

      const wrapProd = (fn) => {
        try {
          fn();
        } catch (e) {
          console.log("try", e);
        }
      };

      console.log("wrap1");
      wrapProd(test);
      console.log("wrap2");

使用window的error事件

可以停到代码异常位置

up-415855e37761ade2f714e7a477b162d71d2.png

但是代码却无法继续向下执行

up-203b9a0e4fac9ef170f93cfb1a6e99c3d9c.png

      const wrapDev = (fn) => {
        const handler = (e) => {
          console.log("handler", e);
        };

        window.addEventListener("error", handler);
        fn();
        window.removeEventListener("error", handler);
      };

使用node结点派发函数的方式

可以停留也能继续执行

up-52791fc721ae924c5897f7ceb4edbdf413d.png

up-1d9920ffdc6d3b60297dda55efb974b1c10.png


      function wrapDev2(func) {
        function handleWindowError(e) {
          // 收集错误交给Error Boundary处理
          console.log("handle2", e);
        }

        function callCallback() {
          fakeNode.removeEventListener(evtType, callCallback, false);
          func();
        }

        const event = document.createEvent("Event");
        const fakeNode = document.createElement("fake");
        const evtType = "fake-event";

        window.addEventListener("error", handleWindowError);
        fakeNode.addEventListener(evtType, callCallback, false);

        event.initEvent(evtType, false, false);

        fakeNode.dispatchEvent(event);

        window.removeEventListener("error", handleWindowError);
      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值