博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Promise使用时应注意的问题
阅读量:5107 次
发布时间:2019-06-13

本文共 1178 字,大约阅读时间需要 3 分钟。

最近在使用axios库时遇到了个问题,后端接口报了500错误,但前端并未捕获到。

1. 调用接口的业务代码如下:

1 // 业务代码调用 2 axios({ 3     url: url, 4     method: 'post', 5     data: data 6   }).then(res => { 7     // 提示用户数据更新成功 8     // 问题:后端接口明明报了500错误,但代码确运行到了这里,导致前端界面提示更新成功 9   }).catch(err => {10     // 提示用户更新失败11     // 问题:本该运行到这里捕获错误,结果却并未捕获12   })

 

很奇怪,代码未按预期的结果运行。

2. 检查下axios整体的配置

// 自己封装的用来过滤http错误的方法function filter500(error, code, errMsg) {  // 界面提示代码略    return Promise.reject(new Error(error))}// axios整体配置,对响应进行拦截axios.interceptors.response.use(data => {  // ui效果代码略  return data}, error => {  // ui效果代码略  const errMsg = error.toString()  const code = errMsg.substr(errMsg.indexOf('code') + 5)  if (code === '401') {    filter401() // 注意这里并未返回  } else if (code === '500') {    filter500(error, code, errMsg) // 注意这里并未返回  } else {    return Promise.reject(new Error(error))  }})

 

在axios整体配置的代码中,过滤http code时,调用了filter401()、filter500(),但是这里注意并未将两个filter函数的结果返回,也就是并未返回promise,这就是导致问题出现的原因,也就是当后端接口报了500错误时被axios拦截了但确并未返回一个promise,导致业务代码中未捕获此错误。所以记住:

**在每个promise链条中必须返回promise,否则调用结果可能和你预期不一样。**

这篇文章最初发表在我自己折腾的博客站点上:,该博客用了一位前辈开源的源码,基于thinkjs和vuejs开发,欢迎大家来逛逛。

转载于:https://www.cnblogs.com/yangtoude/p/promise-chain.html

你可能感兴趣的文章
C++:同名隐藏和赋值兼容规则
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
Microsoft .NET 远程处理:技术概述(代理模式)
查看>>
新手算法学习之路----二叉树(在一个二叉查找树中插入一个节点)
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>
java 类型转型
查看>>
基于C#编程语言的Mysql常用操作
查看>>
【转】Java反射 之 反射基础
查看>>
mysql数据库备份和还原的常用命令
查看>>
s3c2440实验---定时器
查看>>
HBase配置性能调优(转)
查看>>
MyEclipse10安装SVN插件
查看>>
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
python中的字符编码
查看>>
图论例题1——NOIP2015信息传递
查看>>
uCOS-II中的任务切换-图解多种任务调度时机与问题
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>