umi-request 统一异常处理实践
首发于语雀文档
前言
本人在工作中用到了 umi-request,百度谷歌搜了一遍,感觉都没找到超过 3 篇合适且含代码的文章,因此只能自行实践总结了。
umi-request 有点不同
umi-request 与 axios & xhr 不太一样,它是基于 fetch 实现的,因此它只有在网络错误的情况下,才会抛出错误(即:catch),即使接口返回的是 404/500 等错误。
umi-request 自带提供一个错误处理函数 errorHandler,所有在 umi-request 中执行的代码如果抛出错误,都会被捕获。
参考:
https://github.com/umijs/umi-request/blob/master/README_zh-CN.md#错误处理
统一异常处理
官方文档中提供的 errorHandler 示例比较简单,只简单判断了所抛错误 error 是否有 response 属性(比如说网络错误这个场景,error 中就是没有 response 属性)。
这就容易出现一个问题:代码执行出错(比如获取不到外部传入的参数),它所抛的 error 也是没有 response 属性。。。
我觉得目前其实还挺简单的,主要搞清楚以下两点:
- 错误捕获顺序
- 自定义 Error,扩展 Error
错误捕获顺序
- 发生错误
- errorHandler(是个 Promise)
- 如果抛出错误或 reject,则进入下一个 Promise 的 catch,即:request("",{}).then().catch()
- 否则进入下一个 Promise 的 then,即:request("",{}).then()
自定义 Error,扩展 Error
我希望能判断区分以下几类错误:
- 网络错误
- HTTP 错误
- 接口错误
- 其他错误(如代码执行错误)
那就使用 ES6 Class 继承一下 Error 进行封装。
参考:
https://zh.javascript.info/custom-errors
后续
后续还可以再复杂一点,自定义扩展一下请求错误和响应错误以示区分,不过应该都差不多。
Github
github 上的代码是本人的一整套 umi-request 实践,并非只含 umi-request 错误处理
https://github.com/blueju/umi-request-practice
最新文章
- 为什么 NaN 不等于自身?
- Breeze库API总结(Spark线性代数库)(转载)
- [原] XAF ListView 凍結列
- elk+redis分布式分析nginx日志
- linux php安装扩展方法 查找配置文件
- POJ1008Maya Calendar
- Android code wiki
- nodejs模板加载的问题
- 《前端之路》之二:数据类型转换 &;&; 隐式转换 || 显式转换
- ConcurrentLinkedQueue使用和方法介绍
- js 判断字符串中是否包含某个字符串
- Mysql查看表的建表语句
- Scrapy学习篇(九)之文件与图片下载
- li内有span需要右浮的问题
- 学习windows编程 day1
- [日常] Go语言圣经-匿名函数习题
- 系统之锹sysdig:Linux服务器监控和排障利器
- 安装PHP及Memcache扩展
- bisect
- 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜
热门文章
- 为什么90%的大学都要求计算机专业学习C语言?
- Java数据结构(十二)—— 霍夫曼树及霍夫曼编码
- 推荐系统实践 0x09 基于图的模型
- 为什么要小心使用 Task.Run
- nodejs事件和事件循环简介
- 第3章 Python的数据类型 第3.1节 功能强大的 Python序列概述
- PyQt(Python+Qt)学习随笔:利用QWidget部件的palette以及ColorGroup、colorRole局部调整部件的特定范围颜色
- 几句话说明 .NET MVC中ViewData, ViewBag和TempData的区别
- 团队作业4-Day2
- es6 数组新增方法