不明白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