当前位置: 首页 > news >正文

async,await(特点,项目中应用)

一、async,await的特点

  **async/ await来发送异步请求,从服务端获取数据,代码很简洁,同时async/await 已经被标准化**

特点:

▲asayc的用法,它作为一个关键字放到函数前面,这样普通函数就变为了异步函数
▲异步async函数调用,跟普通函数的使用方式一样
▲异步async函数返回一个promise对象
▲async函数配合await关键字使用(阻塞代码往下执行)
是异步方法,但是阻塞式的

async/await的优点:

方便级联调用:即调用依次发生的场景;
同步代码编写方式: Promise使用then函数进行链式调用,一直点点点,是一种从左向右的横向写法;async/await从上到下,顺序执行,就像写同步代码一样,更符合代码编写习惯;
多个参数传递: Promise的then函数只能传递一个参数,虽然可以通过包装成对象来传递多个参数,但是会导致传递冗余信息,频繁的解析又重新组合参数,比较麻烦;async/await没有这个限制,可以当做普通的局部变量来处理,用let或者const定义的块级变量想怎么用就怎么用,想定义几个就定义几个,完全没有限制,也没有冗余工作;
同步代码和异步代码可以一起编写: 使用Promise的时候最好将同步代码和异步代码放在不同的then节点中,这样结构更加清晰;async/await整个书写习惯都是同步的,不需要纠结同步和异步的区别,当然,异步过程需要包装成一个Promise对象放在await关键字后面;
sync/await是对Promise的优化: async/await是基于Promise的,是进一步的一种优化,不过在写代码时,Promise本身的API出现得很少,很接近同步代码的写法;

使用场景

async主要来处理异步的操作,
需求:
执行第一步,将执行第一步的结果返回给第二步使用。
在ajax中先拿到一个接口的返回数据,
后使用第一部返回的数据执行第二步操作的接口调用,达到异步操作。

async/ await案例:

首先把 getFaceResult 转化成一个async 函数,就是在其前面加async, 因为它的调用方法和普通函数的调用方法是一致,所以没有什么问题。然后就把 getLocation 和getFaceList 放到await 后面,等待执行, getFaceResult 函数修改如下

async getFaceResult () {
                let location = await this.getLocation(this.phoneNum);
                if (location.data.success) {
                    let province = location.data.obj.province;
                    let city = location.data.obj.city;
                    let result = await this.getFaceList(province, city);
                    if (result.data.success) {
                        this.faceList = result.data.obj;
                    }
                }
            }

相关文章:

  • Horizon View 7 发布Win10桌面二:即时克隆桌面池配置
  • 系统恢复
  • generator(特点,项目应用)
  • Java日期类
  • 设计一个算法,判断玩家是否赢了井字游戏
  • ES6的数组方法详解(ES5新增)
  • 【转载】CSS 入门精要(四)
  • ES6新增数组方法
  • 心情随笔
  • includes()方法和indexOf()方法数组去重
  • KVM之网桥创建(ubuntu 环境)
  • orcale创建临时表空间,表空间,创建用户
  • 事件监听
  • Google Guava14.0 瓜娃学习笔记
  • 前端实现图片懒加载(lazyload)的两种方式
  • 2018一半小结一波
  • Android框架之Volley
  • Android优雅地处理按钮重复点击
  • CSS 三角实现
  • Debian下无root权限使用Python访问Oracle
  • GraphQL学习过程应该是这样的
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Phpstorm怎样批量删除空行?
  • Python利用正则抓取网页内容保存到本地
  • 读懂package.json -- 依赖管理
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 聊聊sentinel的DegradeSlot
  • 每天10道Java面试题,跟我走,offer有!
  • 排序算法之--选择排序
  • 盘点那些不知名却常用的 Git 操作
  • 试着探索高并发下的系统架构面貌
  • 算法系列——算法入门之递归分而治之思想的实现
  • 微服务核心架构梳理
  • Spring Batch JSON 支持
  • 湖北分布式智能数据采集方法有哪些?
  • ​Spring Boot 分片上传文件
  • (1)常见O(n^2)排序算法解析
  • (3)llvm ir转换过程
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (五)Python 垃圾回收机制
  • (循环依赖问题)学习spring的第九天
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Core与存储过程(一)
  • .NET处理HTTP请求
  • .net打印*三角形
  • .net经典笔试题
  • :=
  • @EventListener注解使用说明
  • @开发者,一文搞懂什么是 C# 计时器!