async 关键字 1.含义:表示函数是一个异步函数,意味着该函数的执行不会阻塞后面代码的执行2.定义与调用async function hello (flag) {if (flag) {return 'hello world'} else {return 'my god,failure'}}// async 函数返回的是一个promise 对象,如果要获取到promise 返回值,我们应该用then 方法console.log(hello(true))  //Promise {<resolved>: "hello world"}console.log(hello(false)) //Promise {<resolved>: "my god,failure"}hello(true).then(res => {console.log(res)}).catch(err => {console.log(err)})console.log('虽然在后面,但是我先执行');3.注意点:   1.async 函数 返回值是Promise 对象2.如果async函数内部有 await,必须等到此async函数内部的异步操作(await)执行完,才会执行then方法指定的回调函数await 关键字1.含义:表示等待的意思,遇到await代码就不在向下执行,直到执行完毕才继续2.定义与调用function handleAfter2seconds (num) {return new Promise((resolve, reject) => {setTimeout(() => {resolve(2 * num)}, 2000);})}async function result () {let first = await handleAfter2seconds(30);let second = await handleAfter2seconds(50);let third = await handleAfter2seconds(30);// 不需要等first执行完再去嵌套second执行再去嵌套third执行//写异步代码就像写同步代码一样了,再也没有回调地域了console.log(first + second + third) //220}result();注意:1.await 关键字只能放到async 函数里面2.await命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。async function f() {// 等同于// return 123;return await 123;}f().then(v => console.log(v)) //1233.await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中任何一个await语句后面的 Promise 对象变为reject状态,那么整个async函数都会中断执行。async function f() {await Promise.reject('出错了');await Promise.resolve('hello world'); // 不会执行}当希望即使前一个异步操作失败,也不要中断后面的异步操作。async function f() {try {await Promise.reject('出错了');} catch(err) {console.log(err);}return await Promise.resolve('hello world');}f().then(v => console.log(v))或者async function f() {await somethingThatReturnsAPromise().catch(function (err) {console.log(err);});}4.多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。例子:假设getFoo和getBar是两个异步的操作let foo = await getFoo();let bar = await getBar();按上面的写法比较耗时,可按下面改进://getFoo和getBar都是同时触发,这样就会缩短程序的执行时间let [foo, bar] = await Promise.all([getFoo(), getBar()]);  拓展:async 函数多种使用形式// 函数声明async function foo() {}// 函数表达式const foo = async function () {};// 箭头函数const foo = async () => {};// Class 的方法class Storage {constructor() {this.cachePromise = caches.open('avatars');}async getAvatar(name) {const cache = await this.cachePromise;return cache.match(`/avatars/${name}.jpg`);}}const storage = new Storage();storage.getAvatar('jake').then(…);// 对象的方法let obj = { async foo() {} };obj.foo().then(...)

  

转载于:https://www.cnblogs.com/changxue/p/10810357.html

async 与 await相关推荐

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

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

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

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

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

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

  4. node mysql await_node.js中对 mysql 进行增删改查等操作和async,await处理

    要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...

  5. C# 5.0中引入了async 和 await

    C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: [csharp] view plaincopy public class MyClass { p ...

  6. ES6中的promise、async、await用法详解

    <!DOCTYPE html> <html> <head><title>Promise.async.await</title> </h ...

  7. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记--async和await(一) 接上文 多线程编程学习笔记--async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  8. Async和Await如何简化异步编程几个实例

    引言 C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 同步代码存 ...

  9. node.js中对 mysql 进行增删改查等操作和async,await处理

    要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...

  10. 【转载】 C# 中的Async 和 Await 的用法详解

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

最新文章

  1. 希捷硬盘读取固件区数据
  2. VB:如何隐藏/显示treeview的ToolTips
  3. PHP7新增的主要特性
  4. SpringIOC配置文件「bean」标签的属性id class name scope init-method destroy-method factory-bean factory-method
  5. Docker教程(二) Docker环境安装
  6. Cassandra Leveled Compaction源码阅读
  7. 如何批量修改图片宽高尺寸
  8. dedecms 安装后 管理后台ie假死 无响应的解决方法
  9. 微信小程序投诉页面与交互设计
  10. ChatGPT注册全流程
  11. ESP32系列:Unhandled debug exception 、Doubled exception错误
  12. kali linux 最新下载,kali新版本下载,Kali Linux 2019.4 开放下载
  13. 如何扩展Linux系统分区大小
  14. 聚乙烯亚胺(PEI)超细纤维负载Pd纳米粒子,GA-PEG-PLA 甘草次酸-聚乙二醇-聚乳酸定制合成
  15. Firebird使用入门
  16. 无线 配置ldap 认证服务器,在无线局域网控制器wlcs上使用ldap的web认证配置示例-cisco.pdf...
  17. lnmp+redis+mysql
  18. 目标检测trick汇总
  19. 桌面日历的手机APP
  20. 登录成功后如何在首页获取登录名

热门文章

  1. ext.net 开发学习之TabPanel (二)
  2. 题解——洛谷P2734 游戏A Game 题解(区间DP)
  3. Kylin 对维度表的的要求
  4. Mac DBeaver Client home is not specified for connection解决办法
  5. sublime text 3 3143
  6. 类对象工厂设计模式(Factory Pattern)
  7. [转]sqlserver 创建分区表
  8. linux c 获取文件数量
  9. L1-046 整除光棍-PAT团体程序设计天梯赛GPLT
  10. L2-013. 红色警报-PAT团体程序设计天梯赛GPLT(图的连通分量个数统计)