封装的axios请求,promise+async+await

本文介绍了一种封装Axios库的方法,用于简化HTTP请求流程。通过自定义fetch函数,实现了对线上环境URL前缀的自动添加,并通过Promise处理异步响应。此外,还展示了如何进一步封装网络请求API,以便于在项目中重复使用。

导出一个方法,在fetch文件里

1.引入axios

import axios from 'axios'

2.封装axios

export default async(url='',data={},method='post')=>{
	if(process.env.NODE_ENV !== 'development'){
		url = 'biyao/public' +url; //线上得前缀路径
}
	return new Promise((resolove,reject)=>{
		axios({
			url,
			data,
			method
}).then(resObj=>{
	resolve(resObj['data'])
}).catch(err=>{
	

})

})
}

再封装一个网络请求api

1,引入刚刚封装的axios方法

import fetch from '@utils/fetch'

2.导出方法

export const homePageCommand = (data,loading)=>fetch('/api/firstCategory',data)

3.使用这个方法

//1.
mouted(){
//定义一个方法
this.getData()

}
//2.
methods:{
async getData(){
	await homePageCommand ().then(res=>{
	

})

}
}

async 函数返回一个 Promise 对象,当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句

### 创建基于 TypeScript 的 Axios 封装用于 Vue3 请求 为了在 Vue3 项目中利用 TypeScript 对 Axios 进行二次封装来创建请求接口,可以遵循以下方法: #### 安装依赖库 首先,在项目根目录下安装必要的 npm 包: ```bash npm install axios @types/axios vue-router@next --save ``` #### 配置 Axios 实例 接着定义一个通用的 Axios 实例配置文件 `api.ts` 或者 `http.ts`。此实例将被整个应用程序共享。 ```typescript // src/utils/api.ts import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'; const service: AxiosInstance = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 5000 // request timeout }); service.interceptors.request.use( (config: AxiosRequestConfig) => { const token = localStorage.getItem('token'); if (token && config.headers) { config.headers['Authorization'] = `Bearer ${token}`; } return config; }, error => Promise.reject(error) ); export default service; ``` 上述代码片段展示了如何设置带有默认选项的基础 URL 超时时间,并添加了一个拦截器以自动附加认证令牌到每个发出的 HTTP 请求头中[^1]。 #### 构建 API 接口函数 随后可以在单独的服务层模块里声明特定于应用的数据获取方法。这些方法通常返回由 Axios 发起调用的结果承诺对象。 ```typescript // src/services/userService.ts import service from '../utils/api'; import IUserResponse from '@/interfaces/IUserResponse'; class UserService { public async fetchUsers(): Promise<IUserResponse[]> { try { const response = await service.get('/users'); return response.data.users as IUserResponse[]; } catch (error) { throw new Error(`Failed to load users: ${(error as any).message}`); } } } export default new UserService(); ``` 这里假设服务器响应结构包含名为 `users` 的字段列表;同时引入了自定义类型 `IUserResponse` 来描述预期接收到的对象格式。 #### 使用服务类 最后一步是在组件内部注入并使用之前建立的服务实例来进行数据交互操作。 ```typescript // src/components/UserList.vue <script setup lang="ts"> import userService from '@/services/userService'; import type { Ref } from 'vue'; import { onMounted, ref } from 'vue'; let userItems: Ref<Array<any>> = ref([]); onMounted(async () => { try { userItems.value = await userService.fetchUsers(); } catch (err) { console.error(err); } }); </script> <template> <ul v-if="userItems.length !== 0"> <li v-for="(item, index) in userItems" :key="index">{{ item.name }}</li> </ul> <p v-else>No data available.</p> </template> ``` 这段脚本演示了怎样通过组合式API (`setup`) 函数加载用户信息,并将其绑定至模板渲染上下文中显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值