笔者之前分析了如何实现js的责任链异常处理的方法,通过promise这个异步模型,我们能够对同步方法和异步方法的两种情况,均可以实现责任链模式。有了这些武器,我们就可以开始设计ui的统一异常处理方案了。
1.统一异常处理方案
这里所谓统一异常处理方案,其实就是指对那些底层无法处理的,一层层抛到了边界类的异常,在边界类中根据异常的不同类型,做出不同处理方案的处理策略。为了能在边界类中对异常类型做出判断,我们需要将常用的异常类型定义出来,再将原始异常包装为这些系统内部定义的异常类型。所以,整个统一处理方案的需求大致有如下几点:
- 异常处理必须是责任链模式,最终将底层不能处理的异常抛到边界类上。
- 需要对原始异常包装系统异常,将其封装为我们指定的系统。
- 系统异常封装过程需要业务代码解耦,方便以后对其扩展。
- 边界类中的统一异常处理能够对与不同的系统异常,需要采用的不同的处理策略。
- 系统异常和处理策略是可增加的。
- 系统异常必须包含错误的堆栈调用信息,方便调试时找出错误。
这种统一处理异常的方案,我们在服务器端开发经常用到的,客户端往往不需要实现这种复杂的异常处理方案。但是随着前后台完全解耦,尤其是spa应用的但是,前端现在越来越复杂。而系统复杂的同时,出现异常的概率和异常处理的难度也在增加,所以统一异常处理同样适于用客户端,即我们的ui页面。
2.统一的ui异常处理方案
如果后端的异常处理核心是记录日志,那么ui的异常处理核心在于向用户响应。不同的错误给用户的响应也应该是不一样的,我们需要分析出常出现的异常,并为其设计出处理策略,这才是ui异常处理方案的核