不明白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);
    }
  });
};

http://img.mukewang.com/climg/5d59273300015d7c04630168.jpg

将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那个函数了,封装好的直接用就行。

0

好帮手慕码

2019-08-18

同学你好!

axios的config中提供了一个cancelToken属性,可以通过传递一个新的CancelToken对象来在请求的任何阶段关闭请求。

c这个函数是人家封装好的,直接使用即可。

这是固定写法:

cancelToken: new CancelToken(function executor(c) {    // executor 函数接收一个 cancel 函数作为参数
    cancel = c;
  })

如果帮助到了你,欢迎采纳,祝学习愉快~

0
hoso_crazy
h 官方文档还使用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.');
h019-08-19
共1条回复

0 学习 · 10739 问题

查看课程