Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.4k views
in Technique[技术] by (71.8m points)

vue 如何封装try catch

const encapsulation = function (method) {
  try {
    //调用encapsulation这个方法时传入方法或函数会执行在这里
  } catch (error) {
    return
  }
}

理想效果是可以调用异步接口

encapsulatio(await editUser(data))

很多try catch的代码看起来很乱,想着怎么把try catch封装,然后调用这个封装后的方法,把函数或者代码传入encapsulation这个方法后,能在try里执行

我表达的可能不是很清晰,在这里先感谢各位大神们的解答了,小弟感激不尽!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

采用和节流、防抖一样的实现方式,用高阶函数实现,也就是 encapsulation 返回一个函数,这个函数会在执行时把参数传递给 method

const encapsulation = function (method) {
    return function(...args){
        try {
            //调用encapsulation这个方法时传入方法或函数会执行在这里
            return method.bind(this)(...args);
        } catch (error) {
            return error
        }
    }
};

// 调用的时候:
function test(a, b){
    return console.log(a, b);
}
const tryTest = encapsulation(test);

tryTest(1, 2); // 1, 2

不过要慎用encapsulation,因为屏蔽错误往往会导致调试困难,甚至导致更为棘手的问题;另外,在容易产生性能瓶颈的代码中也要尽量保证函数的可靠性和参数的一致性,使用高阶函数和try...catch都可能进一步降低性能。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...