OpenHarmony开发者论坛
标题:
同一个请求有不同的拦截、超时等处理方法,之前使用retrofit实现,如何在axios实现同样功能?
[打印本页]
作者:
xiagengwen
时间:
2023-8-31 19:32
标题:
同一个请求有不同的拦截、超时等处理方法,之前使用retrofit实现,如何在axios实现同样功能?
[md]【问题描述】
retrofit很容易对相同的请求接口进行不同的配置,同一个请求有不同的拦截、超时等处理方法,该功能不知道怎么在axios实现?例如我在retrofit中使用场景:
1)创建RetrofitBuilder配置;支持设置baseurl,设置Gson解析,设置自定义httpclient(例如okhttp),然后okhttp我们就能设置各种拦截器,超时。如图3
2)不同的RetrofitBuilder配置我们可以传入不同的okhttp的实例,实现不同的拦截,不同的超时请求。如图3。
3)使用上也很方便,拿对应的Api接口对象(不需要超时处理的,就拿toolApiWithNoTimeOut),直接调用方法就行。如图4。


图3 不同的RetrofitBuilder配置
通过不同的RetrofitBuilder,就能针对相同的接口(ToolApi定义的接口),创建不同的拦截实现,超时实现等。

图4 用不同的RetrofitBuilder配置,来创建不同的请求接口对象
【运行环境】
硬件:rk3568; ROM: 3.2 Beta5; API 9
[/md]
作者:
admin
时间:
2023-9-1 08:53
就能针对相同的接口(ToolApi定义的接口)
作者:
admin
时间:
2023-9-1 08:56
创建不同的拦截实现,超时实现等
作者:
马迪
时间:
2023-9-5 10:19
对于上述 的使用场景,在axios中同样支持,并且使用更方便。
1. axios支持设置baseurl,设置Json解析(js原生接口),设置各种拦截器,和统一超时时间,如图1,还可以设置单个请求超时时间(图2)。
2. 同一请求设置不同的axios实例实现不同的拦截(语法支持),对标Retrofit第二第三点,如图1、图2、图3
(, 下载次数: 0)
上传
点击文件名下载附件
import {AxiosStatic,AxiosInstance } from '@ohos/axios'
import axios from '@ohos/axios'
console.log("ttttt first load")
const request:AxiosInstance = axios.create({
baseURL:'http://139.159.161.172:3000',
timeout:3000,
responseType:"text"
})
// request拦截器
request.interceptors.request.use(async config => {
// 所有请求统一添加时间戳,避免部分获取到缓存数据
let timerstamp = new Date().getTime();
switch (config.method.toLocaleLowerCase()){
case 'get':{
if(config.params){
config.params.timerstamp = timerstamp;
}else{
config.params = {timerstamp:timerstamp};
}
break;
}
case 'post':{
if(config.data){
config.data.timerstamp = timerstamp;
}else{
config.data = {timerstamp:timerstamp};
}
break;
}
}
return config
}, error => {
Promise.reject(error);
})
// 响应拦截器
request.interceptors.response.use(res => {
return res;
}, error => {
return Promise.reject(error);
}
)
export const AxiosRequest = request
复制代码
(, 下载次数: 0)
上传
点击文件名下载附件
import {AxiosInstance } from '@ohos/axios'
import axios from '@ohos/axios'
const request:AxiosInstance = axios.create({
baseURL:'http://xxxx:3000',
timeout:3000
})
export const AxiosRequest2 = request
复制代码
(, 下载次数: 0)
上传
点击文件名下载附件
import {AxiosRequest} from './Request'
import {AxiosRequest2} from './Request2'
import {search} from './api/SearchApi'
search({keywords:"飘向北方"},{},AxiosRequest,5000)
search({keywords:"飘向北方"},{},AxiosRequest2,1000)
复制代码
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5