let cancel 的疑问

let cancel 的疑问

api/category.js  中

const CancelToken = axios.CancelToken
let cancel

// 获取内容数据--ajax
export const getCategoryContent = (id) => {
 cancel && cancel('取消了请求')
 cancel = null

.......


cancel  是let 定义的变量  为什么 能像函数一样传值  cancel('取消了请求')?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕慕子 2019-09-09 18:09:03

“qq_Cherish_66”这位同学,    理解的是可以的哦, 祝学习愉快~~~

Miss路 2018-10-14 12:07:47

http://img1.sycdn.imooc.com//climg/5bc2beba00017c5817521374.jpg

同学,我们要看全部的代码进行分析,首先观察一下这个cancel都出现在了哪儿。

下面我给你慢慢分析一下:

1、上面第五行`let cancel` 是先在函数外申明了一个变量。然后第八行在请求开始前 他会判断cancel是不是存在,存在就调用,调用完后赋值为空,这里的cancel就是上面申明的。他在第12行 如果这一次请求被取消的时候 会被赋值,上下cancel都是同一个。函数内部他找不到cancel会去上层作用域找,虽然cancel是个变量,但是他被赋值了一个方法,所以可以被调用,也就是在13行的时候,这个c就是一个方法。

2、第一次调用`getCategoryContent` 这个cancel必然是空的,调用的时候如果取消了这个请求 ,这个cancel就会被在13行的地方进行赋值,下一次调用`getCategoryContent`的时候就有这个cancel了。

3、这里之所以可以把cancel变量当成一个方法来用,是因为:在12行 new CancelToken的时候传了一个函数作为参数进去 他在内部调用这个函数的时候 就会把这个取消请求的函数作为参数传递过来,也就是说,这里new CancelToken 他会有一个回调函,回调函数给的第一个参数c就是一个函数,调用他就可以终止请求。

所以,在13行的时候,cancel被赋值为了一个函数,所以在第八行的时候可以把cancel当成函数来调用。

如果帮助到了你,欢迎采纳!


  • 非常感谢讲的感觉很详细了,但是感觉有点绕,以及一点点小疑问想请教一下, 这个12,13行的cancelToken是axios自己定义的,如果当前这个请求没有请求完,又来了一个新的请求,那么12,13行才会执行,对cancel赋值为一个函数? 1、如果请求正常执行完,12,13行不会执行,cancel为空 2、如果请求没有执行完,又来一个新的请求,前一个请求就会执行12,13行,给cancel赋值为一个函数,再新的请求入口处,第8行就能检测到cancel,并且执行cancel方法,这个方法里面的参数会自动传到isCancel()的参数内部作参数最后在23行打印出来 同时执行完第8行以后再把上一个请求的cancel=null 发送新的请求 第8行执行cancel函数会触发err在catch处被捕获,就可以用22行这里打印出来? 不知道理解的对不对?
    2019-09-09 15:32:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

热门框架Vue开发WebApp 18版
  • 参与学习           人
  • 提交作业       209    份
  • 解答问题       3299    个

本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师