ajax catch,promise记得写上catch
举个栗子,如果用户在没有登陆的条件下调用接口,那么所有接口都应该返回一个状态码表示用户没有登陆,此时需要跳转到登陆页进行登陆。
但是如果每次调用接口都需要判断一下,代码就会显得十分冗余,因此我们定义了一个apAjax.js,核心代码如下:
const apAjax = (options) => {
// 一些配置代码
return new Promise((resolve, reject) => {
axios({
method: options.method,
url: options.url,
data: options.data,
...
}).then((res) => {
resolve(res)
if(res.code == 401) {
// 跳转到登陆页
}
// 其他代码
}).catch((error) => {
reject(error)
})
})
}
调用
import apAjax from 'apAjax.js'
apAjax(options).then(res => {
// 在这里我们只需要处理接口正常返回的情况即可
// 因为未登陆的情况已经在apAjax.js里面统一处理了
})
看上去代码更加精简了,并且在全局有了统一的错误处理,但是当我们的项目接入sentry日志监控之后,却收到了下图的报错信息
明明在封装的apAjax函数里面进行了catch错误捕获,为什么还会报错呢?
可以看到我们axios函数的then方法里面第一行代码就是resolve(res),这时候Promise的状态已经变成了resolved,这种改变是不可逆的,此时就算后面的其他代码抛出异常,也不会被catch方法捕获到。
另外,Promise对象的错误还有“冒泡”的性质,会一直向后传递,直到被捕获为止。但是上面的调用代码只有then没有catch。(以为被全局统一捕获了,所以没写)最终诞生了这个无家可归的异常。
不仅如此, Promise之间泾渭分明,内部Promise抛出的任何错误,外部Promise对象都无法感知并捕获。 同时,由于promise是异步的,try catch语句也无法捕获其错误。
因此养成良好习惯,不要偷懒,每一个Promise都请记得写上catch。
ajax catch,promise记得写上catch相关推荐
- Promise—关于catch(你真的了解catch的执行顺序吗)
一.问题 今天突然被同事问到一个问题,以下代码怎么输出: Promise.all([new Promise(res => res(0)), new Promise((res, rej) => ...
- SpringMvc+ajax实现文件跨域上传
最近开始学习SpringMVC框架,在学习数据绑定的时候,发现可以使用@RequestParam注解绑定请求数据,实现了文件上传.但是如果一个项目是前后端分离的,前端系统向后端服务上传文件该怎么解决了 ...
- 这次彻底搞懂 Promise(手写源码多注释篇)
作者:一阵风,一枚只想安静写代码的程序员,来自程序员成长指北交流群 github: https://github.com/yizhengfeng-jj/promise 前言 promise 是 ...
- 深入理解Promise并写一个符合Promise a+规范的Promise代码
深入理解Promise并写一个符合Promise a+规范的Promise代码 关于Promise函数可以参考我写的这篇文章https://www.cnblogs.com/qiaohong/p/770 ...
- php的注册头像上传,用Ajax实现注册与头像上传功能
这次给大家带来用Ajax实现注册与头像上传功能,Ajax实现注册与头像上传功能的注意事项有哪些,下面就是实战案例,一起来看一下. 在初次接触ajax后,我们做了一个crm训练的项目,大多数小组都有注册 ...
- java catch子句的排列,对于catch子句的排列
19.在异常处理中,如释放资源.关闭文件.关闭数据库等由( A.try 子句 B.catch 子句 C.finally 子句 D.throw 子句 20.对于 catch 子句的排列,下列哪种是... ...
- 求求你别再写上千行的类了,试试这些牛逼的重构技巧吧
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:juejin.cn/post/6844904038383747086 答应我,别再写上千行的类了好吗 最近在对已有项目进行扩展 ...
- 答应我!别再写上千行的类了,好吗?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://juejin.im/post/ ...
- php文件里直接写上?xml version=1.0 encoding=utf-8?出错?
因为你的PHP启用了短标签功能,即<?php ... ?> 缩写为<? ... ?>,所以当你写上<?xml version="1.0" enco ...
最新文章
- 自学web前端的方法都有哪些?新手怎么学HTML5
- 计算机在中学物理的应用分析报告,BGPLUS官方合作 | 加州大学伯克利分校 | 物理:计算机算法及物理在工程中应用...
- 一个长方体玻璃容器从里面量长宽_泰来包装分享:如何设计钢边箱里面中型木包装箱...
- Python MetaClass深入分析
- 使用RMAN迁移文件系统数据库到ASM
- 文件服务器自动化管理
- 处理得怎么样填空词语_武都网络推广软件效果怎么样【易商网络】
- 怎么把柱形图和折线图放在一起_excel怎么把柱状图和折线图合并
- VS C++项目报错warning C4199: ……use /Zc:twoPhase-
- 中国矿业大学(北京)第二届ACM程序设计公开赛(决赛)
- 单片机c语言程序编写步骤,Proteus运行Keil编写的51单片机C语言步骤
- c语言查表法编程流水灯,通过查表法的流水灯汇编程序
- 深度学习和自然语言处理的应用
- 大数据就业前景怎么样?hadoop工程师、数据挖掘、数据分析师薪资多少?
- ubuntu启动两个mysql_同一台Ubuntu 启动多个mysql
- arm_neon.h文件ABI说明
- (五)Richardson 迭代法
- 书摘---创业36条军规5:如何选择创业方向
- Singing Contest
- MyBatisPlus查询时报错,Unknow column ‘id‘ in ‘field list‘,怎么解决?
热门文章
- python3 struct模块 处理二进制 pack unpack用法
- ddos中的tcp反射攻击技术分析
- 十种MySQL报错注入
- apt-get常用命令
- C将十六进制数字字符串转成数字
- 频率分布直方图组距如何确定_小猿圈Python开发之绘制频率分布直方图示例
- mysql connector bin_mysql-connector-java-xxx-bin.jar包的使用
- mysql 按月自动建表
- html和css有序列表,HTMLCSS基础学习笔记14—有序列表及列表嵌套
- java 视频 缩略图_Java截取视频文件缩略图