作为开发来讲,异常处理如同家常便饭。只要写就一定会出错,这是一定的。那面对海量的错误,我们应该怎么处理,又有哪些一定要处理呢?
为什么要处理异常?
因为客户,更因为产品竞争力。异常的产生,在开发环境来说还好,但是放到生产上,那就是毁天灭地的大事。甚至可能丧失一大部分客户,往小说也是在消磨客户对公司的耐心。
需要处理哪些异常?
现在想想,需要处理的异常还真不少。原则就是尽可能处理任何错误。总结如下:
- 页面崩溃和卡顿
- 浏览器跨域问题
- 语法类型错误
- 接口报错,对前端来说。虽不能减少,但是要尽量降低影响。
- 资源请求问题
万能解法的隐患
上面的所有问题,对于前端来说有一个万能解决技巧。那就是try-catch语法。所以,绝大部分问题都可以使用try-catch解决,但是也有些隐患提前掌握下。
try-catch只能捕获同步的运行错误,对语法和异步错误无能为力。例如:
// 对同步执行的错误捕获
try {
const name = 'yaoshen';
console.log(age);
} catch(error) {
console.log('错误原因是:', error);
}
错误捕获输出:
错误原因是: ReferenceError: age is not defined
at <anonymous>:3:21
但是,不能捕获到语法类型错误。
// catch你捕获不到我
try {
let name = yaoshen';
console.log(age);
} catch(error) {
console.log('错误原因是:', error);
}
异常输出:
VM574:2 Uncaught SyntaxError: Invalid or unexpected token
这里可以看到,异常的输出,并不来自catch的捕获。而是直接语法报错了。
非同步的js执行报错
try {
setTimeout(() => {
'yaoshen'.set(666);
}, 996)
} catch(error) {
console.log('错误原因是:', error);
}
这里的控制台报错如下:
VM911:3 Uncaught TypeError: "yaoshen".set is not a function
at <anonymous>:3:15
通过这个例子,可以得出结论。异步执行中的错误,不会被catch捕获。
总结语
本文从提出问题,到解决问题。并且详细的梳理了try-catch的使用方法,以及能被捕获的异常。当然,更需要注意的是不能被捕获的地方。希望这里能帮大家避坑。
时间是一切财富中最宝贵的财富。 ——德奥弗拉斯多