异步处理方案

news2024/11/30 0:36:08

目录

1.通过promise的链式调用将异步方法变为同步执行

2.使用async及await

3.回调函数方式

4.三种方式对比

 5.async及await使用的注意点


1.通过promise的链式调用将异步方法变为同步执行

function get1(){
  return new Promise((resolve,reject) =>{
    console.log('执行get1接口逻辑')
    setTimeout(() =>{
      if(flag.value){
        resolve('get1接口执行完成')
      }else{
        reject('get1接口执行失败')
      }
    },3000)

  })

}

function get2(){
  return new Promise((resolve,reject) =>{
    console.log('执行get2接口逻辑')
    setTimeout(() =>{
      if(flag.value){
        resolve('get2接口执行完成')
      }else{
        reject('get2接口执行失败')
      }
    },2000)

  })

}
function get3(){
  return new Promise((resolve,reject) =>{
    console.log('执行get3接口逻辑')
    setTimeout(() =>{
      if(flag.value){
        resolve('get3接口执行完成')
      }else{
        reject('get3接口执行失败')
      }
    },2000)

  })

}
function get4(){
  return new Promise((resolve,reject) =>{
    console.log('执行get4接口逻辑')
    setTimeout(() =>{
      if(flag.value){
        resolve('get4接口执行完成')
      }else{
        reject('get4接口执行失败')
      }
    },2000)

  })

}
// 进行get1-get4方法的顺序执行
get1()
.then(res=>{
  console.log(res);
  return get2()
})
.then(res=>{
  console.log(res);
  return get3()
})
.then(res=>{
  console.log(res);
  return get4()
})
.then(res=>{
  console.log(res);
})

执行结果:

2.使用async及await

function get1(){
  return new Promise((resolve,reject) =>{
    console.log('执行get1接口逻辑')
    setTimeout(() =>{
      if(flag.value){
        resolve('get1接口执行完成')
      }else{
        reject('get1接口执行失败')
      }
    },3000)

  })

}

function get2(){
  return new Promise((resolve,reject) =>{
    console.log('执行get2接口逻辑')
    setTimeout(() =>{
      if(flag.value){
        resolve('get2接口执行完成')
      }else{
        reject('get2接口执行失败')
      }
    },2000)

  })

}
function get3(){
  return new Promise((resolve,reject) =>{
    console.log('执行get3接口逻辑')
    setTimeout(() =>{
      if(flag.value){
        resolve('get3接口执行完成')
      }else{
        reject('get3接口执行失败')
      }
    },2000)

  })

}
function get4(){
  return new Promise((resolve,reject) =>{
    console.log('执行get4接口逻辑')
    setTimeout(() =>{
      if(flag.value){
        resolve('get4接口执行完成')
      }else{
        reject('get4接口执行失败')
      }
    },2000)

  })

}

async function get(){
  //使用await可以让异步操作进行同步执行
 const result1 =  await get1();
 console.log(result1)
 const result2 =  await get2();
 console.log(result2)
 const result3 =  await get3();
 console.log(result3)
 const result4 =  await get4();
 console.log(result4)
}
get()

执行结果:

await只能在async修改的异步函数中进行使用。 

3.回调函数方式

使用较少,多级回调导致函数难以理解。

4.三种方式对比

 

 5.async及await使用的注意点

①下面的示例中第一个任务执行完成之后才能执行第二个任务。

更高效的做法是将所有的Promise用Promise.all组合起来,然后再去await,这样会提高运行效率,如下:

 ②在循环中执行异步操作,不能直接调用forEach及map方法,尽管在回调函数中写了await,这里的forEach会立即返回,不会暂停等到所有的异步操作都执行完成。如下:

如果希望循环中的异步操作都一一执行完成之后才继续执行 ,可以使用传统的for循环,如下:

 如果想要循环中的所有操作都并发执行,这里的for循环会等到所有的异步函数执行完成之后才执行后面的处理

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

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

相关文章

【Java 数组解析:探索数组的奇妙世界】

数组的引入 我们先通过一段简单的代码引入数组的概念。 import java.util.Scanner; public class TestArray01{public static void main(String[] args){//功能:键盘录入十个学生的成绩,求和,求平均数://定义一个求和的变量&…

ICCV 2023 风格迁移方向 5 篇论文

1、StyleDiffusion: Controllable Disentangled Style Transfer via Diffusion Models 内容和风格(Content and style disentanglement,C-S)解耦是风格迁移的一个基本问题和关键挑战。基于显式定义(例如Gram矩阵)或隐式…

[BUG]Datax写入数据到psql报不能序列化特殊字符

1.问题描述 Datax从mongodb写入数据到psql报错如下 org.postgresql.util.PSQLException: ERROR: invalid bytesequence for encoding "UTF8": 0x002.原因分析 此为psql独有的错误,不能对特殊字符’/u0000’,进行序列化,需要将此特殊字符替…

2022年全球运维大会(GOPS上海站)-核心PPT资料下载

一、峰会简介 GOPS 主要面向运维行业的中高端技术人员,包括运维、开发、测试、架构师等群体。目的在于帮助IT技术从业者系统学习了解相关知识体系,让创新技术推动社会进步。您将会看到国内外知名企业的相关技术案例,也能与国内顶尖的技术专家…

MK米客方德品牌 SD NAND在对讲机领域的引领作用

SD NAND在对讲机上的应用 SD NAND在对讲机上广泛应用,为其提供了高效可靠的存储解决方案。 这种存储技术不仅能容纳大量语音和数据文件,而且具有高速读取的特点,保障了实时通信的质量。SD NAND还注重安全性,通过数据加密和访问控…

2024-01-01 服务器开发-11个最佳免费和便宜SSL证书颁发机构

摘要: 2024-01-01 服务器开发-11个最佳免费和便宜SSL证书颁发机构 ssl证书颁发机构 在网站上实施 SSL 证书不再被视为奢侈品。它不仅通过加密网站访问者与您的网站之间交换的通信来提高您的网站安全性,而且还提高了网站的 SEO 排名。此外,如果你托管的平…

Nx市工业数据洞察:Flask、MySQL、Echarts的可视化之旅

Nx市工业数据洞察:Flask、MySQL、Echarts的可视化之旅 背景数据集来源技术选型功能介绍创新点总结 背景 随着工业化的不断发展,Nx市工业数据的收集和分析变得愈发重要。本博客将介绍如何利用Flask、MySQL和Echarts等技术,从统计局获取的数据…

单板滑雪入门指南-小白单板滑雪记录

snowboarding tutorial for beginners 第一次滑雪要准备什么? 保险 水和食物 装备: 头盔 滑雪手套 雪服或者防水冲锋衣 护具 雪镜 有什么装备就带什么装备,没有的话就去雪场租。 滑雪前要做什么? 做好热身运动,谨防…

web综合大实验!!!

目录 一、要求 二、操作步骤 第一步:关闭防火墙+SeLinux 第二步:挂载 第三步:编辑配置文件 第四步:安装软件包 1、安装httpd 2、安装mod_ssl模块 第五步:定义主配置文件 1、创建首页文件 2、重启…

【Redis技术专区】「原理分析」探讨Redis6.0为何需要启用多线程

探讨Redis 6.0为何需要启用多线程 背景介绍开启多线程多线程的CPU核心配置IO多线程模式单线程处理方式多线程处理方式 为什么要开启多线程?充分利用多核CPU提高网络I/O效率响应现代应用需求 多线程实现启用多线程 最后总结 背景介绍 在Redis 6.0版本中,…

python编程从入门到实践(1)

文章目录 2.2.1命名的说明2.3字符串2.3.1使用方法修改字符串的大小写2.3.2 在字符串中使用变量2.3.3 制表符 和 换行符2.5.4删除空白2.5.5 删除前缀+后缀 2.2.1命名的说明 只能包含:字母,下划线,数字 必须:字母&#…

安装torch(GPU版本)并在Pycharm中配置

零.前置环境 1.NVIDIA GPU Computing Toolkit已安装 版本为:11.6 已添加到环境变量 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\libnvvp 在cmd中查看cuda版本 方法1&#xff1a…

基于Matlab的各种图像滤波Filter算法(代码开源)

前言:本文为手把手教学 Matlab 平台下的各种图像滤波算法的教程,将编程代码与图像滤波知识相联系,以实战为例!博客中图像滤波算法包含:均值滤波、中值滤波、高斯滤波、双边滤波、引导滤波。图像滤波算法是计算机视觉领…

极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件

文章目录 前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库,我们需要两个软件的支持,分别是cpolar(用于搭建内网穿透数据隧道…

ES6之Reflect详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码

基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于斑点鬣狗算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于斑点鬣狗优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

新手小白:一文带你用vite从零搭建企业级开发环境

在这工作的半年时间里,开始接触了前端开发,技术栈主要用的是 vue2,但是自己利用时间也学习了 vue3,组合式 api 和 vue3 的各种生态比 vue2 好用太多了,特别是状态管理库 pinia 比 vuex 简介很多,构建工具也…

35--JDK新特性

1、新语法结构 新的语法结构,为我们勾勒出了 Java 语法进化的一个趋势,将开发者从复杂、繁琐的低层次抽象中逐渐解放出来,以更高层次、更优雅的抽象,既降低代码量,又避免意外编程错误的出现,进而提高代码质…

09 标准库软件模拟I2C时序

引言: 你需要的I2C知识这里都有, 本文涵盖了I2C的基本知识和在各个主流平台的开发实例, 总之, 你需要的,都在这里, 后续我也会继续更新在嵌入式开发中常见的通信协议。 一、I2C的基本知识 1. I2C介绍 IIC总…

【JVM】一文掌握JVM垃圾回收机制

作为Java程序员,除了业务逻辑以外,随着更深入的了解,都无法避免的会接触到JVM以及垃圾回收相关知识。JVM调优是一个听起来很可怕,实际上很简单的事。 感到可怕,是因为垃圾回收相关机制都在JVM的C++层实现,我们在Java开发中看不见摸不着;而实际很简单,是因为它说到底,也…