New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
axios:取消请求的使用案例分析 #3
Comments
当时的业务逻辑应该是在页面加载时,或者说组件创建时就去请求,请求中先赋值了: |
但这样就报错了,已声明的属性cancel,写成this. cancel(),就相当于在调用方法,控制台报错cancel为已声明过该属性。。。不理解发自我的华为手机-------- 原始邮件 --------发件人: cnjs <notifications@github.com>日期: 2020年4月14日周二 16:01收件人: ohhoney1/notes <notes@noreply.github.com>抄送: yanye411325 <lkk411325@163.com>, Comment <comment@noreply.github.com>主 题: Re: [ohhoney1/notes] axios:取消请求的使用案例分析 (#3)
data里边cancel 定义了 null ,后边还用 this.cancel('')?
当时的业务逻辑应该是在页面加载时,或者说组件创建时就去请求,请求中先赋值了:new CancelToken(c => (this.cancel = c)),调用 toCancel时 this.cancel已经有值了。
为了保险起见,this.cancel && this.cancel() 更规范。
—You are receiving this because you commented.Reply to this email directly, view it on GitHub, or unsubscribe.
|
@yanye411325 不太理解你说的,或许你可以给个复现场景 |
很棒,厉害,感谢大佬 |
如何做到全局控制取消请求和单条取消请求两者都存在呢? 根据 参考链接4 中,在请求拦截器中 写入的全局 cancelToken 已经覆盖了单条请求传入的 cancelToken 了,做不到单条控制了 |
自己解决了,基于上述代码做了些许修改
|
document
取消http请求,
axios
文档里提供了两种用法:项目中用法示例
在一个真实的项目中,一般都会对
axios
进行二次封装,针对请求、响应、状态码、code等做处理。贴一个项目里常用的request.js
:对于某一个请求添加取消的功能,要在调用api时,加上
cancelToken
选项,使用时的示例:以上,我们就可以顺顺利利地使用封装过的
axios
,取消某一个请求了。其原理无非就是把cancelToken
的配置项,在调用api时加上,然后就可以在业务代码取消特定请求了。批量取消请求
在 document 里的第二种方法已经说过:通过指定同一个
cancel token
来取消。但是,在上面的项目示例中,不能控制拿到相同的cancel token
。我们可以换个思路:用数组保存每个需要取消的cancel token
,然后逐一调用数组里的每一项即可:切换路由时,取消请求
上面讲了取消一个请求及页面内批量abort的方法,此外,还有一种需求——切换路由时,取消所有。
这里不详细赘述了,大概思路就是在请求拦截器里,统一加个
token
,并设置全局变量source
控制一个cancel token
,在路由变化时调用cancel
方法。具体实现,见 参考链接4。取消请求的实现原理
cancelToken
的source
方法维护了一个对象,里面包括了token
令牌和cancel
方法,token
来自与构造函数CancelToken
,调用cancel
方法后,token
的promise状态为resolved
,进而又调用了xhr的abort
方法,取消请求成功。具体见 参考链接5。参考链接
The text was updated successfully, but these errors were encountered: