Async+Await相较于promise代码,优雅简洁了很多,避免了.then嵌套回掉...

Async关键字

async function fun1(){   return  "hello world"}function  fun2() {      console.log("我是后面的程序")}fun1().then(value=>{    console.log(value)})fun2();
//我是后面的程序
//hello world复制代码
console.log(fun1())复制代码

async 语法相对比较简洁在函数前面添加async关键字,表示此函数为一个异步函数,即是异步,就表示不会阻塞后面的程序,所以hello world后输出,直接调用fun1()不会输出hello world,通过打印输出,我们发现它返回的是一个promise对象,所以需要.then()回掉函数,输出promise返回值。

let promise = new Promise((resolve, reject) => {    setTimeout(() => {        let flag=false        if (flag) {            resolve('success')        } else {            reject('failed')        }       }, 1000)})async function test() {    let result =  promise    return result  }test().then(response => {    console.log(response) }).catch(error => {    console.log(error)})复制代码

当async有返回值,调用该函数时,内部会调用promise.resolve()把它转化成一个对象返回,promis当内部抛出错误时,会调用promise.reject()返回错误的值,promise对象用catch方法进行错误捕获。

Await等待什么呢?

function promise(num){    return new Promise((resolve,reject)=>{        setTimeout(function(){             resolve(2*num)         },3000)               })}async function fun4(){    let result =await promise(20);    console.log(result)    console.log("我是后面的程序")}fun4()//3秒后先输出40,再输出我是后面的程序复制代码

await 必须和async搭配使用,它等待的是一个promise对象执行完,并返回promise.resolve的值,当结果出现时再继续执行后面的代码,当等待结果发生异常如何处理呢?用try/catch,把await放到try里来执行,用catch来处理异常。

function promise(num){    return new Promise((resolve,reject)=>{        setTimeout(function(){             resolve(2*num)         },3000)               })}function num1(n){    return promise(n)}function num2(n){    return promise(n)}function num3(n){    return promise(n)}//promise方式async function fun4(){    const time1 = 10;    num1(time1)        .then(time2 => num2(time2))        .then(time3 => num3(time3))        .then(result => {            console.log(`result is ${result}`);        });    // let result =await promise(20);    // console.log(result)    console.log("我是后面的程序")//这个函数中,我是后面的程序先执行,.then异步执行}
//我是后面的程序,result is 80//async+await方式
async function fun4(){    const time1 = 10;    const time2 = await num1(time1);    const time3 = await num2(time2);    const result = await num3(time3);    console.log(`result is ${result}`);    console.log("我是后面的程序")//这个函数中,我是后面的程序后执行,await先执行,得到结果后再执行后面的代码}fun4()//result is 80  我是后面的程序复制代码

使用promise时都是用.then回掉处理返回的值,用await便避免了.then嵌套回掉,把异步用同步方式来实现了,没有回掉调用感觉。

总结

使用 async / await, 搭配 promise, 可以通过编写形似同步的代码来处理异步流程, 提高代码的简洁性和可读性。

Async Await 的优点:

1、解决了回调地狱的问题
2、可以添加返回值 return xxx;
3、可以在代码中添加try/catch捕获错误

Async和Await简介相关推荐

  1. 第十节:利用async和await简化异步编程模式的几种写法

    一. async和await简介 PS:简介 1. async和await这两个关键字是为了简化异步编程模型而诞生的,使的异步编程更简洁,它本身并不创建新线程,但在该方法内部开启多线程,则另算. 2. ...

  2. 【Flutter】Future 异步编程 ( 简介 | then 方法 | 异常捕获 | async、await 关键字 | whenComplete 方法 | timeout 方法 )

    文章目录 一.Future 简介 二.Future.then 使用 三.Future 异常捕获 四.Dart 练习网站 五.async.await 关键字 六.whenComplete 方法 七.ti ...

  3. ES6-Promise简介、ES7 新特性及ES8新特性-async和await

    目录 ES6-Promise Promise简介 Promise.prototype.then方法 Promise.prototype.catch方法 ES7 新特性 Array.prototype. ...

  4. asp.net html5 异步,asp.net core 系列 5 项目实战之:NetCore 的 async 和 await(参考自:Microsoft教程)...

    十年河东,十年河西,莫欺少年穷 学无止境,精益求精 1.简介 从 VS 2012 开始,新引入了一个简化的方法,称为异步编程.我们在 >= .NETFRM 4.5 中和 Windows 运行时中 ...

  5. 面试官问 async、await 函数原理是在问什么?

    大家好,我是若川.这是 源码共读活动<1个月,200+人,一起读了4周源码> 第四期,纪年小姐姐的第四次投稿.纪年小姐姐通过本次学习提早接触到generator,协程概念,了解了async ...

  6. Async和Await异步编程的原理

    1. 简介 从4.0版本开始.NET引入并行编程库,用户能够通过这个库快捷的开发并行计算和并行任务处理的程序.在4.5版本中.NET又引入了Async和Await两个新的关键字,在语言层面对并行编程给 ...

  7. 利用 async amp; await 的异步编程

    一.异步编程的简介 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力. Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framework 4.5 ...

  8. python async await报错_Python 3.7.7 发布 支持async并await现在为保留关键字

    Python 3.7.7 发布了,这是一个 bug 修复版本.2020 年中之前将持续更新 3.7 系列的 bug 修复版本,并直到 2023 年中之前持续提供安全修复版本. 目前 3.8 已经是最新 ...

  9. JavaScript 异步编程--Generator函数、async、await

    JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...

  10. C# 中的Async 和 Await 的用法详解

    众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...

最新文章

  1. 初学架构设计的第一步:需求、愿景与架构
  2. Java XML解析器
  3. mysql galera_(十六)MySQL集群galera实现
  4. 无线AP与无线交换机的区别
  5. fiddler2抓包数据工具使用教程
  6. 安装oracle不动了,windows2008安装ORACLE到2%不动的问题 | 信春哥,系统稳,闭眼上线不回滚!...
  7. matlab与c 混合编程问题,MATLAB与C/C++混合编程的一些总结
  8. LAMP+LNMP(二) MySQL/Mariadb概述与安装实践
  9. 索尼便携式无线服务器,WF-SP900体验报告:2018索尼真无线产品中的顶端存在
  10. 计算机上找不到运行程序怎么办,电脑联网时显示找不到应用程序怎么办
  11. 使用IP地址连接网络打印机
  12. Linux(七)DNS域名解析服务器学习
  13. 到底哪一首才是唐诗第一?
  14. android测试篇(三)单元测试之UI测试 Espresso学习与实践
  15. 小米应用使用时间统计_屏幕使用时间
  16. C/C++中argv[ ]与argc内容解读//(涉及运用cmd)
  17. Vim位置标记mark详解
  18. 计算机图形基础学答案,计算机图形学基础答案全.pdf
  19. 代码规范Sonar报Raw types should not be used
  20. 微信公众号服务器配置详解一览

热门文章

  1. netcat 传输文件
  2. spring boot 发邮件
  3. JS 运算、判断优化
  4. 【BZOJ】3576: [Hnoi2014]江南乐
  5. 继Spring 会议个人计划统计(补)
  6. C#读取excel 找不到可安装的ISAM
  7. asp.net 页面ajax访问被阻塞
  8. iphone中扫描wifi热点
  9. 最新的.net书籍教程 更新时间:2005-9-5
  10. iOS :APP 提交描述注意事项