异步处理方案

目录

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循环会等到所有的异步函数执行完成之后才执行后面的处理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

B端产品学习-市场调研与分析

B端产品市场调研与分析 目录: 为什么要做产品调研 B端产品调研对比C端产品调研 B端产品调研要怎么做 为什么要做产品调研 杰克特劳特说过:“成为唯一。如果不能争得第一,那就找到一个能够成为第一的细分,这就是定位的第一法则…

激发大规模ClickHouse数据加载(3/3)确保加载大规模数据的可靠性

本文字数:7016;估计阅读时间:18 分钟 作者:Tom Schreiber 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 本文是“激发大规模ClickHouse数据加载”系列文章的最后一篇: 激发…

【华为机试】2023年真题B卷(python)-猴子爬山

一、题目 题目描述: 一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯: 每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式? 二、输入输出 输入描述…

springboot基于Java的大学生迎新系统

springboot基于Java的大学生迎新系统 源码获取: https://docs.qq.com/doc/DUXdsVlhIdVlsemdX

Windows磁盘空间占用分析工具-WizTree

文章目录 WizTree作用WizTree树状分析图WizTree特点获取网址 WizTree作用 平时我们电脑用久了,产生很多文件,导致盘符空间不足,但是不知道那些文件占用比较多,这就需要磁盘空间分析工具-WizTree来分析文件占用情况 WizTree树状分…

信息网络协议基础_绪论

文章目录 交换技术基本概念电路交换电话交换网 分组交换数据报交换虚电路交换 网络体系结构新的网络技术和体系结构Delay/Disruption Tolerant Networking(DTN)如何理解间隙性? Software Define Networking(SDN)Future Internet ArchitectureNDN(Named Data Network…

测试C#使用OpenCvSharp从摄像头获取图片

OpenCvSharp也支持获取摄像头数据,不同于之前测试AForge时使用AForge控件显示摄像头数据流并从中截图图片,OpenCvSharp中显示摄像头数据流需要周期性地从摄像头中截取图片并显示在指定控件中。本文学习C#使用OpenCvSharp从摄像头获取图片的基本方式。  …

【算法练习】leetcode链表算法题合集

链表总结 增加表头元素倒数节点,使用快慢指针环形链表(快慢指针)合并有序链表,归并排序LRU缓存 算法题 删除链表元素 删除链表中的节点 LeetCode237. 删除链表中的节点 复制后一个节点的值,删除后面的节点&#x…

uniapp中的uview组件库丰富的Form 表单用法

目录 基本使用 #Form-item组件说明 #验证规则 #验证规则属性 #uView自带验证规则 #综合实战 #校验错误提示方式 #校验 基本使用 此组件一般是用于表单验证使用,每一个表单域由一个u-form-item组成,表单域中可以放置u-input、u-checkbox、u-radio…

Javaweb之Mybatis入门程序的详细解析

1.2 入门程序实现 1.2.1 准备工作 1.2.1.1 创建springboot工程 创建springboot工程&#xff0c;并导入 mybatis的起步依赖、mysql的驱动包。 项目工程创建完成后&#xff0c;自动在pom.xml文件中&#xff0c;导入Mybatis依赖和MySQL驱动依赖 <!-- 仅供参考&#xff1a;只…

初始Web服务器

一、web服务器 1、什么是web服务器&#xff1f; web服务器就是web项目的容器&#xff0c;我们将开发好的web项目部署到web容器中&#xff0c;才能使用网络中的用户通过浏览器进行访问。 一张图带你了解web服务器有啥作用&#xff1a; 在我的电脑上有一个已经做好的项目&#…

Openwrt修改Dropbear ssh root密码

使用ssh工具连接路由器 输入&#xff1a;passwd root 输入新密码 重复新密码 设置完成 rootImmortalWrt:~# passwd root Changing password for root New password:

2023年总结(2023年1月1日至2023年12月31日)

前言 时间过得真快啊&#xff0c;一年又过去了。 从去年11月换了家公司后&#xff0c;工作就稳定多了&#xff0c;做的工作也是我喜欢做的工作——摄像头驱动&#xff0c;平时也挺轻松的&#xff0c;偶尔有事儿的时候会压力大点&#xff0c;加点班&#xff0c;其他都还好&…

《2023年企业IoT和OT威胁报告》:物联网恶意软件攻击增长400%

内容概括&#xff1a; 物联网&#xff08;IoT&#xff09;设备无疑改变了我们生活、工作和管理运营技术&#xff08;OT&#xff09;环境的方式。总体而言&#xff0c;到2027年&#xff0c;全球物联网设备数量预计将超过290亿&#xff0c;比2023年的167亿大幅增加。设备和智能技…

伺服电机为什么叫伺服电机,内部结构是什么,工作原理是什么,有什么特点。

问题描述&#xff1a;伺服电机为什么叫伺服电机&#xff0c;内部结构是什么&#xff0c;工作原理是什么&#xff0c;有什么特点。 问题解答&#xff1a; 名字是拉丁语音译过来的&#xff0c;直译的话就叫奴仆电机。 "伺服"一词源于拉丁语 "servus"&#…

面试手撕算法高频专题:数组的双指针思想及应用(算法村第三关白银挑战)

所谓的双指针其实就是两个变量&#xff0c;不一定真的是指针。 快慢指针&#xff1a;一起向前走对撞指针、相向指针&#xff1a;从两头向中间走背向指针&#xff1a;从中间向两头走 移除值为val的元素 题目描述 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 给你…

【C#】知识点实践序列之Lock的输出多线程信息

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂之知识点实践序列》文章。 2023年第2篇文章&#xff0c;此篇文章是C#知识点实践序列之Lock知识点&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 本篇在Lock锁定代码…

开关电源反馈环路重要参数设计,PC817和TL431实例计算和取值详解

author&#xff1a;小高霸气 data:2021.04.16 下面介绍开关电源重要的反馈电路PC817和TL431设计和应用。 在开关电源当中&#xff0c;对稳压反馈电路的设计通常会使用TL431和PC817来配合使用。在TOP 及3842等单端反激电路中的反馈电路很多都采用TL431和PC817作为参考、隔离、取…

Vue中目录以及文件内容简单分析

src文件下目录分析&#xff1a; App.vue文件中内容&#xff1a; vue文件中基本的三个结构&#xff0c;template&#xff08;结构&#xff09;、script&#xff08;行为&#xff09; 、style&#xff08;样式&#xff09;。 <template><!-- html结构 --><div cl…

记一次Oracle Cloud计算实例ssh恢复过程

#ssh秘钥丢失# &#xff0c; #Oracle Cloud# 。 电脑上的ssh秘钥文件不知道什么时候丢失了&#xff0c;直到用的时候才发现没有了&#xff0c;这下可好&#xff0c;Oracle Cloud的计算实例连不上了&#xff0c;这个实例只能通过ssh连接上去&#xff1a; 以下是解决步骤&#x…