axios 取 消 请 求

axios-取消令牌,是用于在发送请求时,允许你取消该请求的一种机制

axios取消令牌是通过 axios.CancelToken.source() 方法创建的

当你创建一个令牌时,它会生成一个令牌对象,这个令牌对象包含(token属性:用于标识请求的标记)、(cancel()方法:用于取消请求的函数),

当你想取消请求的时候,调用 cancel()方法,即可终止该请求。


举个例子,如下:


* 创建一个取消令牌
const source = axios.CancelToken.source()

* 发送请求并传递取消令牌
axios
  .get('/api/data', {
    cancelToken: source.token
  })
  .then(res => {
    // 请求成功的处理逻辑
  })
  .catch(error => {
    // axios.isCancel(error) 是 Axios 库提供的一个方法,用于判断一个错误是否是由取消请求导致的
    if (axios.isCancel(error)) {
      // 请求被取消的处理逻辑
    } else {
      // 其他错误处理逻辑
    }
  })

* 在需要取消请求的时候调用 cancel 方法
source.cancel('请求被取消了,可以添加一个取消原因')

补充说明:

在上面的代码中,当,使用取消令牌取消请求后,如果请求被取消了,会触发一个错误,

此时可以使用 axios.isCancel(error) 来判断这个错误是否是由取消请求引起的,

如果返回值为true,则表示这个错误是由取消请求引起的,否则表示是其他类型的错误


例子:


import type { CancelToken } from 'axios'
export const settingUserSystem = (data: any, cancelToken: CancelToken) => {
	return request({
		method: 'post',
		url: Api.SystemSetting,
		data,
		cancelToken
	})
}

-----------------------------------------------

import axios from 'axios'

* 用于存储不同请求的 CancelTokenSource
const cancelSources: { [key: string]: any } = {}

const saveSystem = async () => {
	* 创建一个新的 CancelTokenSource
	cancelSources['cancelKey'] = axios.CancelToken.source()
	
	const params = { Key: '1', Secret: '2' }
	
	try {
		const { state, message: msg } = await userApi.settingUserSystem(params, cancelSources['cancelKey'].token)
		if (state == 200) {
			message.success('保存成功')
		} else {
			message.error(msg)
		}
	} catch (error) {
		message.error('网络请求发送失败~')
	}
}

* 当你想取消这个请求时候,就触发这个方法
const cancelToken = () => {
	cancelSources['cancelKey'].cancel('请求被取消了,可以添加一个取消原因')
}


<a-button @click="saveSystem">保存</a-button>
<a-button @click="cancelToken">取消</a-button>

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于基于web的学生管理系统的实现需要前后端联合实现,因此在下面提供一个基于Spring Boot、MyBatis、Vue等技术栈实现的学生管理系统前后端代码实现的示例,该示例包括以下功能: 1. 学生信息的增删改查操作。 2. 课程信息的增删改查操作。 3. 成绩信息的增删改查操作。 4. 学生和课程的关联操作。 5. 登录和退出系统的功能实现。 前端实现: 前端代码实现使用Vue、Element UI等技术,具体代码实现如下: 1. 学生信息管理页面的实现: ``` <template> <div> <h2>学生信息管理</h2> <el-button type="primary" @click="addStudent">添加学生</el-button> <el-table :data="students" style="width: 100%"> <el-table-column prop="id" label="学号"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button type="primary" size="mini" @click="editStudent(scope.row)">编辑</el-button> <el-button type="danger" size="mini" @click="deleteStudent(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-dialog title="添加学生" :visible.sync="addStudentVisible"> <el-form :model="addStudentForm" label-width="80px"> <el-form-item label="学号"> <el-input v-model="addStudentForm.id"></el-input> </el-form-item> <el-form-item label="姓名"> <el-input v-model="addStudentForm.name"></el-input> </el-form-item> <el-form-item label="性别"> <el-radio-group v-model="addStudentForm.gender"> <el-radio label="男"></el-radio> <el-radio label="女"></el-radio> </el-radio-group> </el-form-item> <el-form-item label="年龄"> <el-input v-model="addStudentForm.age"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="addStudentVisible = false"> </el-button> <el-button type="primary" @click="addStudentSubmit">确 定</el-button> </div> </el-dialog> <el-dialog title="编辑学生" :visible.sync="editStudentVisible"> <el-form :model="editStudentForm" label-width="80px"> <el-form-item label="学号"> <el-input v-model="editStudentForm.id" disabled></el-input> </el-form-item> <el-form-item label="姓名"> <el-input v-model="editStudentForm.name"></el-input> </el-form-item> <el-form-item label="性别"> <el-radio-group v-model="editStudentForm.gender"> <el-radio label="男"></el-radio> <el-radio label="女"></el-radio> </el-radio-group> </el-form-item> <el-form-item label="年龄"> <el-input v-model="editStudentForm.age"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="editStudentVisible = false"> </el-button> <el-button type="primary" @click="editStudentSubmit">确 定</el-button> </div> </el-dialog> </div> </template> <script> import axios from 'axios'; export default { data() { return { students: [], addStudentVisible: false, addStudentForm: { id: '', name: '', gender: '男', age: '' }, editStudentVisible: false, editStudentForm: { id: '', name: '', gender: '', age: '' } }; }, methods: { getStudents() { axios.get('/api/students').then(response => { this.students = response.data; }); }, addStudent() { this.addStudentVisible = true; }, addStudentSubmit() { axios.post('/api/students', this.addStudentForm).then(() => { this.addStudentVisible = false; this.addStudentForm = { id: '', name: '', gender: '男', age: '' }; this.getStudents(); }); }, editStudent(student) { this.editStudentVisible = true; this.editStudentForm = { id: student.id, name: student.name, gender: student.gender, age: student.age }; }, editStudentSubmit() { axios.put(`/api/students/${this.editStudentForm.id}`, this.editStudentForm).then(() => { this.editStudentVisible = false; this.editStudentForm = { id: '', name: '', gender: '', age: '' }; this.getStudents(); }); }, deleteStudent(student) { axios.delete(`/api/students/${student.id}`).then(() => { this.getStudents(); }); } }, mounted() { this.getStudents(); } }; </script> ``` 2. 课程信息管理页面的实现: ``` <template> <div> <h2>课程信息管理</h2> <el-button type="primary" @click="addCourse">添加课程</el-button> <el-table :data="courses" style="width: 100%"> <el-table-column prop="id" label="课程编号"></el-table-column> <el-table-column prop="name" label="课程名称"></el-table-column> <el-table-column prop="credit" label="学分"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button type="primary" size="mini" @click="editCourse(scope.row)">编辑</el-button> <el-button type="danger" size="mini" @click="deleteCourse(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-dialog title="添加课程" :visible.sync="addCourseVisible"> <el-form :model="addCourseForm" label-width="80px"> <el-form-item label="课程编号"> <el-input v-model="addCourseForm.id"></el-input> </el-form-item> <el-form-item label="课程名称"> <el-input v-model="addCourseForm.name"></el-input> </el-form-item> <el-form-item label="学分"> <el-input v-model="addCourseForm.credit"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="addCourseVisible = false"> </el-button> <el-button type="primary" @click="addCourseSubmit">确 定</el-button> </div> </el-dialog> <el-dialog title="编辑课程" :visible.sync="editCourseVisible"> <el-form :model="editCourseForm" label-width="80px"> <el-form-item label="课程编号"> <el-input v-model="editCourseForm.id" disabled></el-input> </el-form-item> <el-form-item label="课程名称"> <el-input v-model="editCourseForm.name"></el-input> </el-form-item> <el-form-item label="学分"> <el-input v-model="editCourseForm.credit"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="editCourseVisible = false"> </el-button> <el-button type="primary" @click="editCourseSubmit">确 定</el-button> </div> </el-dialog> </div> </template> <script> import axios from 'axios'; export default { data() { return { courses: [], addCourseVisible: false, addCourseForm: { id: '', name: '', credit: '' }, editCourseVisible: false, editCourseForm: { id: '', name: '', credit: '' } }; }, methods: { getCourses() { axios.get('/api/courses').then(response => { this.courses = response.data; }); }, addCourse() { this.addCourseVisible = true; }, addCourseSubmit() { axios.post('/api/courses', this.addCourseForm).then(() => { this.addCourseVisible = false; this.addCourseForm = { id: '', name: '', credit: '' }; this.getCourses(); }); }, editCourse(course) { this.editCourseVisible = true; this.editCourseForm = { id: course.id, name: course.name, credit: course.credit }; }, editCourseSubmit() { axios.put(`/api/courses/${this.editCourseForm.id}`, this.editCourseForm).then(() => { this.editCourseVisible = false; this.editCourseForm = { id: '', name: '', credit: '' }; this.getCourses(); }); }, deleteCourse(course) { axios.delete(`/api/courses/${course.id}`).then(() => { this.getCourses(); }); } }, mounted() { this.getCourses(); } }; </script

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值