异常胜于返回码
class Num {
setNum(num) {
if (typeof num !== 'number') {
return 'NOT A NUMBER';
}
if (num < 0) {
return 'LESS THAN ZERO';
}
this.num = num;
}
}
let num = new Num();
let error = num.setNum(5);
if (error !== 'LESS THAN ZERO' && error !== 'NOT A NUMBER') {
console.log(num.num);
}
这样写非常麻烦
- 要返回所有错误码
- 要检查所有错误码
引出异常胜于返回码
用抛出异常代替返回码 ```javascript class Num { setNum(num) {
} }if (typeof num !== 'number') {
throw Error('NOT A NUMBER');
}
if (num < 0) {
throw Error('LESS THAN ZERO');
}
this.num = num;
let num = new Num(); try { num.setNum(5); console.log(num.num); } catch (error) { console.log(error); }
通过将要远行的代码包装try块中,无需检查所有错误码。捕获错误而不用检查可能返回的所有错误代码。
<a name="us7kL"></a>
# 别忘记处理捕获到的错误
在catch块中直接打error打印出来而不作任何处理,这样做是没有任何意义。
- 发现错误不应该忽视
- 报告异常会让我们知道该错误,然后相应进行处理
```javascript
try {
num.setNum(5);
console.log(num.num);
} catch (error) {
console.log(error);
display(error); // 在UI界面有所显示
reportToService(error); // 上报给服务器给予记录,以作后续处理
}
同样对于Promise的异常也是同样地处理。
getData()
.then(data => {
...
})
.catch(error => {
console.log(error);
display(error); // 在UI界面有所显示
reportToService(error); // 上报给服务器给予记录,以作后续处理
});