let cancel 的疑问
api/category.js 中
const CancelToken = axios.CancelToken
let cancel
// 获取内容数据--ajax
export const getCategoryContent = (id) => {
cancel && cancel('取消了请求')
cancel = null
.......
cancel 是let 定义的变量 为什么 能像函数一样传值 cancel('取消了请求')?
正在回答 回答被采纳积分+1
同学,我们要看全部的代码进行分析,首先观察一下这个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当成函数来调用。
如果帮助到了你,欢迎采纳!
- 参与学习 人
- 提交作业 209 份
- 解答问题 3299 个
本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星