同一个请求有不同的拦截、超时等处理方法,之前使用retrofit实现,如何在axios实现同样功能?

xiagengwen 显示全部楼层 发表于 2023-8-31 19:32:07

【问题描述】 retrofit很容易对相同的请求接口进行不同的配置,同一个请求有不同的拦截、超时等处理方法,该功能不知道怎么在axios实现?例如我在retrofit中使用场景: 1)创建RetrofitBuilder配置;支持设置baseurl,设置Gson解析,设置自定义httpclient(例如okhttp),然后okhttp我们就能设置各种拦截器,超时。如图3 2)不同的RetrofitBuilder配置我们可以传入不同的okhttp的实例,实现不同的拦截,不同的超时请求。如图3。 3)使用上也很方便,拿对应的Api接口对象(不需要超时处理的,就拿toolApiWithNoTimeOut),直接调用方法就行。如图4。

1.png

2.png

图3 不同的RetrofitBuilder配置

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

3.png

图4 用不同的RetrofitBuilder配置,来创建不同的请求接口对象

【运行环境】 硬件:rk3568; ROM: 3.2 Beta5; API 9

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论3

admin

沙发 发表于 2023-9-1 08:53:58
就能针对相同的接口(ToolApi定义的接口)

admin

板凳 发表于 2023-9-1 08:56:41
创建不同的拦截实现,超时实现等

马迪

地板 发表于 2023-9-5 10:19:32
对于上述 的使用场景,在axios中同样支持,并且使用更方便。
1. axios支持设置baseurl,设置Json解析(js原生接口),设置各种拦截器,和统一超时时间,如图1,还可以设置单个请求超时时间(图2)。
2. 同一请求设置不同的axios实例实现不同的拦截(语法支持),对标Retrofit第二第三点,如图1、图2、图3

1.png


  1. import {AxiosStatic,AxiosInstance } from '@ohos/axios'  
  2. import axios from '@ohos/axios'  

  3. console.log("ttttt first load")  

  4. const request:AxiosInstance = axios.create({  
  5.    baseURL:'http://139.159.161.172:3000',  
  6.    timeout:3000,  
  7.     responseType:"text"  
  8. })  
  9.   
  10. // request拦截器  
  11. request.interceptors.request.use(async config => {  
  12.     // 所有请求统一添加时间戳,避免部分获取到缓存数据  
  13.     let timerstamp = new Date().getTime();  
  14.     switch (config.method.toLocaleLowerCase()){  
  15.         case 'get':{  
  16.             if(config.params){  
  17.                 config.params.timerstamp = timerstamp;  
  18.             }else{  
  19.                 config.params = {timerstamp:timerstamp};  
  20.             }  
  21.             break;  
  22.         }  
  23.         case 'post':{  
  24.             if(config.data){  
  25.                 config.data.timerstamp = timerstamp;  
  26.             }else{  
  27.                 config.data = {timerstamp:timerstamp};  
  28.             }  
  29.             break;  
  30.         }  
  31.     }  
  32.     return config  
  33. }, error => {  
  34.     Promise.reject(error);  
  35. })  

  36. // 响应拦截器  
  37. request.interceptors.response.use(res => {  
  38.    return res;  
  39. }, error => {  
  40.         return Promise.reject(error);  
  41.     }  
  42. )  

  43. export const AxiosRequest = request
复制代码
2.png


  1. import {AxiosInstance } from '@ohos/axios'  
  2. import axios from '@ohos/axios'  
  3.   
  4. const request:AxiosInstance = axios.create({  
  5.     baseURL:'http://xxxx:3000',  
  6.     timeout:3000  
  7. })  

  8. export const AxiosRequest2 = request
复制代码
3.png

  1. import  {AxiosRequest} from './Request'  
  2. import  {AxiosRequest2} from './Request2'  
  3. import  {search} from './api/SearchApi'  


  4. search({keywords:"飘向北方"},{},AxiosRequest,5000)  
  5. search({keywords:"飘向北方"},{},AxiosRequest2,1000)
复制代码



Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部