在鸿蒙OS的arkts的axios中, 怎么取消某个http请求?

阅读 2.9k
avatarAI BotBETA

在鸿蒙OS的arkts的axios中,取消某个http请求可以通过以下步骤实现:

  1. 首先,确保你已经安装了axios模块,并且已经正确引入到你的项目中。你可以使用npm或yarn来安装axios。
npm install axios

或者

yarn add axios
  1. 在需要取消请求的地方,创建一个CancelToken实例,并使用它来发送取消请求。可以使用axios.CancelToken来创建CancelToken实例。
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
  1. 将创建的CancelToken实例传递给axios请求的配置中,并将其与请求关联起来。这样,当你想取消请求时,可以调用CancelToken实例的cancel方法来取消请求。
axios.get('/api/data', {
  cancelToken: source.token
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // 处理其他错误
  }
});
  1. 当你想取消请求时,调用CancelToken实例的cancel方法,传递一个可选的消息字符串。
source.cancel('Operation canceled by the user.');

这样,与该CancelToken实例关联的axios请求将被取消,并且可以在catch块中处理取消请求的情况。请注意,取消请求后,请求将不再继续执行,并且会抛出一个Cancel对象,你可以使用axios.isCancel函数来检查抛出的错误是否是取消请求。

3 个回答
✓ 已被采纳

axios封装ets

import axios, { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from '@ohos/axios';
const service=axios.create({
  // 配置域名前缀
  baseURL:"https://devb2b.wsttrip.cn",
  headers: {
    'Content-Type': 'application/json',
    "Channel":"B2B"
  },
  method:"post",
})
// 添加请求拦截器
service.interceptors.request.use((config:InternalAxiosRequestConfig) => {
  // 对请求数据做点什么
  return config;
}, (error:AxiosError) => {
  // 对请求错误做些什么
  return Promise.resolve(error);
});
// 添加响应拦截器
service.interceptors.response.use((response:AxiosResponse)=> {
  // 对响应数据做点什么
  return response;
}, (error:AxiosError)=> {
  // 对响应错误做点什么
  return Promise.resolve(error);
});
export default service;

调用封装接口

import {User} from '../../api/User'

@Entry
@Component
struct Index {
  build() {
    Button("提交注册", { type: ButtonType.Normal, stateEffect: true })
      .borderRadius(50)
      .width('100%')
      .height(45)
      .margin({ top: 35 })
      .fontSize(16)
      .onClick(() => {
        User({
          "accountName": "liu9470",
          "password": "123456"
        }).then((res)=>{
          console.info(JSON.stringify(res))
        }).catch((err)=>{
          console.info(JSON.stringify(err))
        })   
      })
  }
}
// 取消请求
controller.abort()
本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。

斯?为什么我没看到哪里有 controller ?

axios 的话,就参照标准的写法呗,可以在 axios 中定义一个全局的。

const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axios.get('/api/data', {
  cancelToken: source.token
})
本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。

楼主。你好,在发送HTTP请求时,将请求的取消令牌(cancel token)与请求相关联。这个取消令牌可以通过const source = axios.CancelToken.source();方法来创建。
然后调用取消令牌的source.cancel('请求被取消')方法。
就是这么so easy!

本文参与了思否 HarmonyOS 技术问答马拉松,欢迎正在阅读的你也加入。
logo
HarmonyOS
子站问答
访问
宣传栏