javascript 错误处理的实践

84 阅读1分钟

我们考虑自己创建工具函数,工具函数的错误处理机制让使用者可以忽略错误而不受任何影响,或者选择自行处理错误

首先,我们想要做一个工具函数了,大概这个样子。

const utils = {
    foo(fn) {
        fn && fn();
    }
}

// 当我们使用时
utils.foo(() => {})

没有任何错误处理,如果出错了,需要自己处理

utils.foo(() => {
    try {
        // ...
    } catch (error) {
        // ...
    }
})

显然一个工具函数,连个错误处理我还要考虑,谁还用啊,我们在工具函数内部自己处理他们

const utils = {
    foo(fn) {
       try {
        fn && fn();
       } catch (error) {
        // ...
       }
    }
}

之后还有一个问题,就是,如果有一百个函数,难不成你要写一百个 try... catch.. 吗,显然不可取,于是就有了, 把错误处理封装成函数。

const utils = {
    foo(fn) {
        handleError()
    }
}

function callHandleError(fn) {
    try {
        fn && fn();
    } catch (error) {
        console.log(error);
    }
}

这样看着还不错,没什么问题,但是,我们默默地把错误处理掉,用户也想瞅瞅错误到底是个啥,那咋整,于是又有了

let handleError = null;

const utils = {
    foo(fn) {
        callHandleError(fn);
    },
    registerErrorHandle(fn) {
        handleError = fn;
    }
}

function callHandleError(fn) {
    try {
        fn && fn();
    } catch (error) {
        handleError(error);
    }
}

当使用时,就可以

utils.registerErrorHandle((e) => {
    // 如果想自己进行错误处理,在这里拿到错误信息
})

// 调用函数
utils.foo(() => {});

在看书的过程中发现一些思路,作为新手程序员,很多东西没有思路,也没有思路来源,看到好的记录下来,这可能就是以后写代码的思路来源了吧,如果没看到这个,可能就是try...catch 一把梭。

参考《Vue.js的设计与实现》