async 与 await
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相关推荐
- python async await报错_Python 3.7.7 发布 支持async并await现在为保留关键字
Python 3.7.7 发布了,这是一个 bug 修复版本.2020 年中之前将持续更新 3.7 系列的 bug 修复版本,并直到 2023 年中之前持续提供安全修复版本. 目前 3.8 已经是最新 ...
- JavaScript 异步编程--Generator函数、async、await
JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...
- C# 中的Async 和 Await 的用法详解
众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...
- node mysql await_node.js中对 mysql 进行增删改查等操作和async,await处理
要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...
- C# 5.0中引入了async 和 await
C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: [csharp] view plaincopy public class MyClass { p ...
- ES6中的promise、async、await用法详解
<!DOCTYPE html> <html> <head><title>Promise.async.await</title> </h ...
- 多线程编程学习笔记——async和await(三)
接上文 多线程编程学习笔记--async和await(一) 接上文 多线程编程学习笔记--async和await(二) 五. 处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...
- Async和Await如何简化异步编程几个实例
引言 C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 同步代码存 ...
- node.js中对 mysql 进行增删改查等操作和async,await处理
要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...
- 【转载】 C# 中的Async 和 Await 的用法详解
众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...
最新文章
- 希捷硬盘读取固件区数据
- VB:如何隐藏/显示treeview的ToolTips
- PHP7新增的主要特性
- SpringIOC配置文件「bean」标签的属性id class name scope init-method destroy-method factory-bean factory-method
- Docker教程(二) Docker环境安装
- Cassandra Leveled Compaction源码阅读
- 如何批量修改图片宽高尺寸
- dedecms 安装后 管理后台ie假死 无响应的解决方法
- 微信小程序投诉页面与交互设计
- ChatGPT注册全流程
- ESP32系列:Unhandled debug exception 、Doubled exception错误
- kali linux 最新下载,kali新版本下载,Kali Linux 2019.4 开放下载
- 如何扩展Linux系统分区大小
- 聚乙烯亚胺(PEI)超细纤维负载Pd纳米粒子,GA-PEG-PLA 甘草次酸-聚乙二醇-聚乳酸定制合成
- Firebird使用入门
- 无线 配置ldap 认证服务器,在无线局域网控制器wlcs上使用ldap的web认证配置示例-cisco.pdf...
- lnmp+redis+mysql
- 目标检测trick汇总
- 桌面日历的手机APP
- 登录成功后如何在首页获取登录名
热门文章
- ext.net 开发学习之TabPanel (二)
- 题解——洛谷P2734 游戏A Game 题解(区间DP)
- Kylin 对维度表的的要求
- Mac DBeaver Client home is not specified for connection解决办法
- sublime text 3 3143
- 类对象工厂设计模式(Factory Pattern)
- [转]sqlserver 创建分区表
- linux c 获取文件数量
- L1-046 整除光棍-PAT团体程序设计天梯赛GPLT
- L2-013. 红色警报-PAT团体程序设计天梯赛GPLT(图的连通分量个数统计)