vue3项目实战中的接口调用方法(一)async/await用法 对axios二次封装 实现异步请求

news2025/7/10 3:36:01

vue3 async和await联合调用接口 🔥一文搞定

  • 🔥点击进入vue专栏🔥
  • async/await定义
  • async/await用法🔥
    • async/await的基本用法
    • async/await的使用场景
  • async/await实战🔥🔥
    • 处理一个异步请求
    • 处理多个异步请求
  • summary

🔥点击进入vue专栏🔥

上期推文中讲述了vue3项目实战中接口调用的相关知识点,介绍了调用接口的过程和简要方法🔥点击复习vue3项目实战中接口的调用🔥
从本期文章开始将会不定时更新 vue3项目实战中接口调用的三大方法。👏👏👏本期文章将重点介绍vue3的 asyncawait实现异步请求接口
(👏👏👏欢迎大佬们多多指教!)

async/await定义

在进行实际开发时会遇到异步请求的问题,这时候我们异步请求的存在就非常具有合理性了。

async异步的意思,而 await等待的意思,await 用于等待一个异步任务执行完成的结果

🔥1.async/await 是一种编写异步代码的新方法(以前是采用回调promise)。
2. async/await 是建立在 promise 的基础上。
3. async/awaitpromise 一样,也是非阻塞的。
🔥4. async/await 让异步代码看起来、表现起来更像同步代码。

async/await用法🔥

async/await的基本用法

  • async/await是ES7引入的新语法,可以更加方便的进行异步操作
  • async关键词用于函数上(async函数的返回值是Promise实例对象)
  • await关键子用于async函数当中(await可以得到异步的结果)

👇👇 基本格式 如下:

async function queryData(id) {
	const ret = await axios.get('/data');
	return ret;
}
queryData.then(ret=>{
	console.log(ret)
})

示例1(详细版含注解)
在这里插入图片描述
源码:

const initGetList  = async () => { // 函解构用async和await包裹
    const {data:res} = await getList(data) // 获取接口调用函数getList中的值data 其中data是表单里的数据
    // 对data进行解构赋值 取出请求的结果res
    console.log(res) // 控制台打印结果 => 请求成功 code为200
    data.list = res.data // 将请求结果的data值赋给data.list 方便表格table与之数据双向绑定
}
initGetList() //调用函数

这是一个请求后端接口,并将数据返回到后台管理的table表格上的例子。

template部分代码:(UI组件库使用的是Ant Design Vue
在这里插入图片描述

<a-table :data-source="data.list" :columns="columns" style="width:100%"></a-table>

示例2:

// 配置请求的基准URL地址
axios.defaults.baseURL = 'http:localhost:3000';
    //axios请求接口
    axios.get('adata').then(function(ret){
      console.log(ret.data)
    })
    //async请求接口  await后面是Promise实例对象
    async function queryData() {
      var ret = await axios.get('adata');
      // console.log(ret.data)
      return ret.data;
    }
    queryData().then(function (data) {  // 赋值过程
      console.log(data) 
    })
//服务器端的接口
app.get('/adata', (req, res) => {
  res.send('Hello axios!')
})

async/await的使用场景

实际开发中,肯定会遇到关于发送请求获取数据的问题。例如:如果你遇到了 等第一个请求返回数据完,再执行第二个请求(可能第二个请求要传的参数就是第一个请求接口返回的数据)同步请求】这个问题,该怎么去处理呢?由于我们在不使用异步请求的情况下,默认发送多个请求是同步执行的,就会导致我们也不知道到底是哪个接口优先被执行!!!所以,我们必须要学会使用async/await实现异步请求!!!

async/await实战🔥🔥

处理一个异步请求

验证登录:

在这里插入图片描述
源码:

// 验证登录
// async 和 await 包裹需要请求的对象的值 相当于对axios的一个二次封装
const handleFinish = async (value: any) => {  // 表单输入完毕后点登录调用handleFinish函数
    // async包裹handleFinish函数的参数value 传参
    console.log(value)
    const {data:res} = await userLoginApi(value) // 对data解构赋值 取出请求结果res data是请求接口中存放表单数据的变量
    // 先从请求接口的函数userLoginApi中获取存入的表单数据value 然后用await包裹 赋值给请求结果res
    console.log(res)
    if(res.code === 20001){ // 这里的20001来自浏览器中 要看清楚是成功的值还是失败的值
        console.log('login successfully')
        message.success('login succesfully') // 数据验证通过弹出跳转成功提示框
        // 用对话存储的方法set(送进去)一个token
        window.sessionStorage.setItem('token',res.data.tokenValue) // token的位置从浏览器控制台中可以得到
        router.push("/home") // 数据验证成功后跳转页面
    } else {
        message.error('请求失败 请重新输入') // 数据验证不成功则弹出错误提示框
        console.log('error')
    }
};

表格数据:(更多见示例一)
在这里插入图片描述

处理多个异步请求

  • 第一个异步请求的结果
  • 可以作为第二个异步请求内部的参数,进行判断等数据操作。
  • 形成链式关系

在这里插入图片描述

示例1:

// 配置请求的基准URL地址
axios.defaults.baseURL = 'http://localhost:3000';
	//async请求接口
    async function queryData() {
      var info = await axios.get('async1');
      //axios传递给服务器/async2接口的info.data参数,用于接口内部判断
      //传参格式:[ '地址?属性名=属性值' ]or [ ' 地址?对象= ' + '对象.属性名']
      var ret = await axios.get('async2?info=' + info.data);
      return ret.data;
    }
    queryData().then(function(data){
      console.log(data)
    })
    
//服务器端的接口 
app.get('/async1', (req, res) => {
  res.send('hello')
})
app.get('/async2', (req, res) => {
  if (req.query.info == 'hello') {
    res.send('async1的结果确实是hello')
  } else {
    res.send('error')
  }
})

在这里插入图片描述
示例2:

const datas = async ()=> {
  await request.selectPies(Route.path.split('/')[3]).then(res=>{
  	states.ids = res.obj
	console.log(res)
  })
  //查询发帖子用户信息
  await request.selectUsers(states.ids).then(res=>{
    console.log(res.obj)
  })
}
datas()

这里是在vue3 setup语法糖中使用异步请求,从代码看出,第二个接口要使用第一个接口返回的数据,因此使用了异步请求。

summary

在前后端分离的开发模式下,需要访问后端接口,我们必须要懂得什么是异步请求——给接口的访问加上了顺序,防止它们无厘头的不受顺序限制发送请求!

以上就是vue3项目实战中接口调用方法——async/await用法的详细内容。后期会对剩余两种接口调用方法 fetch axios不定期更新!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/406273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从函数计算到 Serverless 架构

作者&#xff1a;秋雨陈 前言 随着 Serverless 架构不断发展&#xff0c;各云厂商和开源社区都已经布局 Serverless 领域&#xff0c;一方面表现在云厂商推出传统服务/业务的 Serverless 化版本&#xff0c;或者 Serverless 计算平台&#xff1b;另一方面表现在开源社区中 Se…

远程构建(命令、脚本构建)jenkins

在对应项目&#xff0c;开启远程构建开关添加API token系统设置调整用户权限获取crumbcurl调用构建 1、进入对应项目的设置页面&#xff1a;开启远程构建开关 2、 添加 API token&#xff1a;进入对应用户的设置页面 3、系统设置调整权限&#xff0c;如图 4、由于jenkins的安全…

使用element-ui中的el-upload自定义上传

题引&#xff1a; 日常开发系统的时候&#xff0c;我们都会有上传文件的功能。但是用原生的文件上传是很繁琐的&#xff0c;那么我们都会选择使用UI组件库&#xff0c;如element-plus、ant-design等。这些UI组件库是非常容易上手且实用的&#xff0c;但是万恶的需求是奇怪多变…

vue项目引入百度地图BMapGL和BMap实例,以及辅助工具BMapGLLib 的引入,BMapGL鼠标绘制功能

记录一下vue项目使用百度地图所用的api和踩过的坑&#xff0c;减少以后引用少走弯路。旨在记录&#xff0c;第一次开贴&#xff0c;不足之处请多多指教。废话不多说&#xff0c;开撸&#xff01; 1、引用百度地图 这里账号密钥不多说&#xff0c;上链接&#xff0c;自己注册。…

【kubernetes】k8s集群搭建(完整详解)

目录 一、准备工作 二、配置 1、修改主机名 2、修改hosts文件 3、关闭防火墙和SELinux 4、关闭swap 5、修改网卡配置 6、系统模块配置 7、免密登录 8、安装k8s和docker 9、查看k8s集群需要的镜像版本 10、初始化Master节点 11、node配置 12、拉取Nginx镜像进行配置…

【uniapp小程序】视图容器cover-view

&#x1f352;观众老爷们好呀&#xff0c;这里是前端小刘不怕牛牛频道&#xff0c;小程序系列又更新新文章啦&#xff0c;今天的内容是uniapp小程序的视图容器&#xff0c;cover-view &#x1f352;准备好了吗&#xff1f;那我们就发车啦&#xff0c;赶紧拿起小本本把笔记做起来…

10Wqps 超高并发 API网关 架构演进之路

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常遇到一个 API网关 架构方面的问题&#xff1a; (1) 尼恩老师&#xff0c;最近公司我们在规划业务出口网关(目的&#xff0c;整合规范外部调用&#xff0c;如短信平台 mqtt 等) 我在做整理技术方案&…

智能车竞赛:Infineon TC264单片机使用总结快速入门

本文主要是为了备赛第十八届全国大学生智能车竞赛&#xff0c;基于逐飞开源库和芯片数据手册的一些学习总结&#xff0c;使用英飞凌官方的AURIX Development Studio开发环境。 正如STM32的开发方式有标准库和HAL库&#xff0c;Infineon单片机也有官方库&#xff0c;而逐飞开源…

阿里P8大牛用实例跟你讲明白“Java 微服务架构实战”

全文一共十五章&#xff0c;核心内容为SpringBoot、SpringCloud、Docker、RabbitMQ消息组件。其中&#xff0c;SpringBoot是SpringMVC 技术的延伸&#xff0c;使用它进行程序开发会更简单&#xff0c;服务整合也会更容易。SpringCloud 是当前微架构的核心技术方案&#xff0c;属…

Spring Cloud Alibaba 微服务1,系统架构演变 + Nginx反向代理与负载均衡

目录专栏导读一、系统架构演变二、什么是Nginx&#xff1f;三、servername匹配规则四、正向代理与反向代理1、正向代理2、反向代理3、LVS五、负载均衡策略1、轮询2、权重3、ip_hash4、least_conn5、url_hash6、fair7、小结六、动静分离七、URLRewrite专栏导读 &#x1f3c6;作者…

【Linux系统】进程概念

目录 1 冯诺依曼体系结构 2 操作系统(Operator System) 概念 设计OS的目的 定位 总结 系统调用和库函数概念 3 进程 3.1 基本概念 3.2 描述进程-PCB 3.2 组织进程 3.3 查看进程 3.4 通过系统调用获取进程标示符 3.5 进程状态 在了解进程概念前我们还得了解下冯诺…

MongoDB详解,用心看这篇就够了【重点】

1.1 MongoDB概述 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 它支持的数据…

业内人士真心话,软件测试是没有前途的,我慌了......

我在测试行业爬模滚打7年&#xff0c;从点点点的功能测试到现在成为高级测试&#xff0c;工资也翻了几倍。个人觉得&#xff0c;测试的前景并不差&#xff0c;只要自己肯努力。 我刚出来的时候是在鹅厂做外包的功能测试&#xff0c;天天点点点&#xff0c;很悠闲&#xff0c;点…

JS中的构造函数

构造函数 1.构造函数 创建一个构造函数&#xff0c;专门用来创建一个指定的对象的构造函数就是普通的函数&#xff0c;创建方式和普通函数没有区别&#xff0c;不同的是构造函数习惯上首字母大写构造函数和普通函数的区别就是调用方式不同 普通函数是直接调用的&#xff0c;而…

真题解析 | 2022数模美赛C题:股票投资策略

1、准备工作 1.1 题目背景 市场交易者频繁买卖波动性资产&#xff0c;目标是最大化其总回报。每次买卖通常都会有佣金。 两种这样的资产是黄金和比特币。 图 1&#xff1a;黄金每日价格&#xff0c;每金衡盎司美元。 资料来源&#xff1a;伦敦金银市场协会&#xff0c;2021 年…

javaScript实现动态规划(Dynamic Programming)01背包问题

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff1a;vue3从入门…

二十分钟带你了解JVM性能调优与实战进阶

ZGC 诞生原因 Java生态非常强大&#xff0c;但还不够&#xff0c;有些场景仍处于劣势&#xff0c;而ZGC的出现可以让Java语言抢占其他语言的某些特定领域市场。比如 谷歌主导的Android手机系统显示卡顿。证券交易市场&#xff0c;实时性要求非常高&#xff0c;目前主要是C主…

Day16【元宇宙的实践构想04】—— 元宇宙的安全

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 ✍今日内容&#xff1a;《元宇宙的实践构想》04——元宇宙的安全 ❗❗❗从1.31日开始&#xff0c;阿亮每天会查阅一些元宇宙方面的小知识&#xff0c;和大家一起分享。一是由…

ChatGPT背后的技术和多模态异构数据处理的未来展望——我与一位资深工程师的走心探讨

上周&#xff0c;我和一位从业三十余年的工程师聊到ChatGPT。 作为一名人工智能领域研究者&#xff0c;我也一直对对话式大型语言模型非常感兴趣&#xff0c;在讨论中&#xff0c;我向他解释这个技术时&#xff0c;他瞬间被其中惊人之处所吸引&#x1f64c;&#xff0c;我们深…

读书笔记——《再见,平庸时代》

为什么会看这本书 《马斯克》这本书中&#xff0c;最后几段介绍了一下经济学家和作者泰勒考恩的两本书《大停滞》《再见&#xff0c;平庸时代》。《大停滞》讲的是美国这40年发展为何停滞&#xff0c;我当然不太关心这种内容。但是《再见&#xff0c;平庸时代》不是对历史的研究…