Promise与async/await的简单介绍

         在 JavaScript 中,处理异步操作一直是开发者们面临的挑战之一。传统的回调函数方式往往导致代码难以维护、可读性差、易产生回调地狱等问题。为了解决这些问题,出现了 Promise 和 Async/Await 这两种处理异步操作的方式。

一、异步产生问题示例

当我们异步获取一个数据进行同步展示时,数据的获取是有延迟的如下:

onMounted(() => {echarsAll(n.value)init()//data1为echarsAll(n.value)方法获取进行赋值的console.log(data1)
})

控制台打印:

当我们再次添加定时器进行延迟打印时:

onMounted(() => {echarsAll(n.value)//init1()init()setTimeout(() => {console.log(data1)}, 1000)
})

控制台打印,能够获取到结果:

二、 Promise 、Async/Await简介

当我们使用异步获取数据如何像同步一样进行一个展示呢?这就需要使用 Promise 或 Async/Await 来实现类似同步的数据获取方式。

1、使用 Promise 获取异步数据

const getYesterday = () => {return new Promise<void>(async (resolve, reject) => {try {const res = await useFacYesterdayApi()dataForm.yesterdayout = res.data[1]dataForm.yesterdayin = res.data[2]resolve()} catch (error) {// 处理错误reject(error)}})
}
(1)promise的使用步骤
  • 调用 Promise 构造函数并传入一个函数作为参数,该函数接收两个参数:resolvereject

  • 在函数体内,我们可以编写异步任务的代码,并通过 resolve 函数或 reject 函数来处理任务的结果。

(2)promise的执行原理

         Promise 是基于事件循环机制的。在创建 Promise 对象时,会立即执行传入的异步任务代码,并将其封装在一个函数中。

  • 异步任务代码中通常会调用 resolve 函数或 reject 函数来处理任务的结果。
  • 当异步任务成功完成时,会调用 resolve 函数;
  • 当异步任务失败时,会调用 reject 函数。

       可以通过链式调用 then 方法来处理多个异步任务的结果。每次调用 then 方法都会返回一个新的 Promise 对象,因此可以在其后继续调用 then 方法。

 

2、使用 Async/Await 获取异步数据

const getYesterday = async () => {try {const res = await useFacYesterdayApi()dataForm.yesterdayout = res.data[1]dataForm.yesterdayin = res.data[2]} catch (error) {// 处理错误console.log(dataForm.yesterdayin)}
}

        Async/Await 是 ES2017 引入的语法糖,基于 Promise 的基础上提供了更简洁、直观的方式来处理异步操作。使用 Async/Await 可以让异步代码更像同步代码,提升代码的可读性和可维护性。通过在函数前加上 async 关键字,我们定义了一个异步函数,并在其中使用 await 关键字等待 Promise 对象的结果。

(1)Async/Await的使用步骤
  • 使用 async 关键字来定义一个异步函数。异步函数可以包含 await 关键字,用于等待 Promise 对象的解决。
  • 在异步函数中,使用 await 关键字等待一个返回 Promise 对象的表达式,再继续执行后续代码。
(2) Async/Await的执行原理

         async、await看起来更加简洁,使得异步代码看起来像同步代码,只有await的代码执行完毕后才会执行下面的代码; async/await基于Promise实现,相当于Promise的升级版,不能用于普通的回调函数; 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gilisoft Video Editor——迈出剪辑的第一步

今天博主分享的是又一款剪辑软件——视频剪辑手&#xff08;GiliSoft Video Editor&#xff09;&#xff0c;对剪辑视频感兴趣的小伙伴千万不要错过。这是一款专门用于视频剪辑的软件&#xff0c;功能比较简单&#xff0c;相比于专业的pr是比不了的&#xff0c;但是制作一些简单…

Vue 创建虚拟DOM元素的几种方式和实际应用。

目录 创建虚拟DOM元素的方式 创建一个简单的元素&#xff1a; 创建一个带有属性的元素&#xff1a; 创建一个带有子元素的元素&#xff1a; 创建一个带有事件监听器的元素&#xff1a; 创建一个Vue组件 创建一个带Props的组件 创建一个带Slot的组件 实际应用 创建虚…

gma 空间绘图实战(1):绘制多个子图,连接并展示局部放大区域

安装 gma&#xff1a;pip install gma 本文基于&#xff1a;gma 2.0.3&#xff0c;Python 3.10 本文用到的矢量数据为&#xff1a;CTAmap 1.12。来源于 https://www.shengshixian.com/ 。&#xff08;感谢锐多宝&#xff09; 绘图目标 参考代码 import matplotlib.pyplot as p…

jQuery 选择器全部详细笔记

目录 JQuery全部详细笔记-上 jQuery 选择器 jQuery 选择器介绍 jQuery 选择器的优点 代码演示 基本选择器 ● 基本选择器应用实例 程序运行图 层次选择器 ● 层次选择器应用实例 代码演示 表单选择器 ● 表单选择器基本介绍 代码演示 综合代码示例 网页中所有的…

【FMCW毫米波雷达设计 】 — FMCW波形

原书&#xff1a;FMCW Radar Design 1 引言 本章研究驱动FMCW雷达的主要波形:线性调频(LFM)波形。我们研究信号的行为及其性质。随后&#xff0c;本章讨论了匹配滤波理论&#xff0c;并研究了压缩这种波形的技术&#xff0c;特别是所谓的拉伸处理&#xff0c;它赋予FMCW雷达极…

【网络奇缘系列】计算机网络|数据通信方式|数据传输方式

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 这篇文章是关于计算机网络中数据通信的基础知识点&#xff0c; 从模型&#xff0c;术语再到数据通信方式&#…

小目标检测模型设计的一点思考

1. 小目标的特性 目标之间的交叠概率比较低&#xff0c;即使有交叠&#xff0c;其IoU多数情况下也是比较小的 AI-TOD Tiny Person Dateset 小目标自身的纹理显著度有强弱区别&#xff0c;但是总体来说纹理特征都较弱&#xff0c;很多时候需要借助一定的图像上下文来帮助确认 …

IDEA远程调试与JDWP调试端口RCE漏洞

文章目录 前言Docker远程调试Java调试原理远程调试实践 JDWP端口RCE调试端口探测调试端口利用 总结 前言 在对一些 Java CVE 漏洞的调试分析过程中&#xff0c;少不了需要搭建漏洞环境的场景&#xff0c;但是本地 IDEA 搭建的话既麻烦&#xff08;通过 pom.xml 导入各种漏洞组…

【BUG】微信小程序扫码获取不到scene参数的bug修复

问题描述&#xff1a; 扫码后获取不到scene&#xff0c;必须点击“重新进入小程序”才可以 错误原因&#xff1a; 微信小程序的二维码扫描分为两种情况&#xff1a; 冷启动&#xff1a;当用户首次扫描二维码或在后台无该小程序运行实例时打开小程序&#xff0c;此时可以通过…

vuex如何存储数据、获取数据、以及数据的持久化

前提必须已经在vue中安装了vuex插件不然无法使用&#xff0c;不知道怎么创建vue和安装vuex的可以看这个视频&#xff0c;node.js版本最好16以上不然可能会安装失败&#xff1a;30分钟学会Vue之VueRouter&Vuex 趁着暑假掌握一门技能 大学生前端实习毕业设计必备技能_哔哩哔哩…

Linux环境下socket本地通信

最近项目有用到了socket本地通信&#xff0c;故复习一下。之前都是基于本地虚拟机的ip地址通信的&#xff0c;现在项目&#xff0c;Linux单板上面有2个进程需要通信&#xff0c;故用到了本地socket通信&#xff0c;主要其实就是用了sockfd,文件描述符&#xff0c;也叫句柄。 服…

自动化测试:PO模式详解!

PO&#xff08;Page Object&#xff09;模式是一种在自动化测试中常用的设计模式&#xff0c;将页面的每个元素封装成一个对象&#xff0c;通过操作对象来进行页面的交互。 概括来说就是&#xff0c;每个页面都有对应的PO类&#xff0c;PO类中包含了页面的元素定位和操作方法。…