不明白c是什么
来源:1-4 内容组件--取消前一次请求
soso_crazy
2019-08-18 18:26:20
import axios from 'axios'; import {SUCC_CODE, TIMEOUT} from './config'; const CancelToken = axios.CancelToken; let cancel; // 获取内容数据 --ajax export const getCategoryContent = (id) => { cancel && cancel('取消了上一次请求'); cancel = null; // es6用模板字符串拼接传入的id连接到地址后面 return axios.get(`http://www.imooc.com/api/category/content/${id}`, { timeout: TIMEOUT, cancelToken: new CancelToken(function executor(c) { console.log('c is :', c); cancel = c; }) }).then(res => { if (res.data.code === SUCC_CODE) { return res.data.content; } throw new Error('没有获取到内容'); }).catch(err => { if (axios.isCancel(err)) { // 取消前一次请求 console.log('Request canceled', err.message); // 请求如果被取消,这里是返回取消的message } else { // 处理错误 console.log(err); } }); };
将c打印出来的结果是一个函数?
cancelToken: new CancelToken(function executor(c) {
console.log('c is :', c);
cancel = c;
})
官方文档还使用CancelToken.source()来取消请求,那这里的取消上一次请求如果按照下面的方法是怎样写?
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axios.get('/user/12345', {
cancelToken: source.token
}).catch(function (thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
} else {
// handle error
}
});
axios.post('/user/12345', {
name: 'new name'
}, {
cancelToken: source.token
})
// cancel the request (the message parameter is optional)
source.cancel('Operation canceled by the user.');
2回答
慕课网的粉
2019-08-19
兄弟我用你这一段代码在源码里试了试根本不行,简直牵一发动全身,全是报错。推荐你看一个帖子https://www.jianshu.com/p/42d1c58e785e,里面也说了source弊端很大,开发中基本都用c那个函数了,封装好的直接用就行。
好帮手慕码
2019-08-18
同学你好!
axios的config中提供了一个cancelToken属性,可以通过传递一个新的CancelToken对象来在请求的任何阶段关闭请求。
c这个函数是人家封装好的,直接使用即可。
这是固定写法:
cancelToken: new CancelToken(function executor(c) { // executor 函数接收一个 cancel 函数作为参数 cancel = c; })
如果帮助到了你,欢迎采纳,祝学习愉快~
相似问题
回答 1
回答 2