万象更新 Html5 - es6 进阶: async/await

源码 https://github.com/webabcd/Html5
作者 webabcd

万象更新 Html5 - es6 进阶: async/await

示例如下:

es6\src\advanced\async_await.js

/*** async/await - 用于异步编程(非多线程)*   async function 返回的是 Promise 对象*   await 用于等 Promise 对象或者 thenable 对象,其只能放在 async function 中*   所谓的 thenable 对象,就是定义了 then() 方法的对象*/// async function 的说明
// p1() 等价于 p2()
function p1() {return Promise.resolve("webabcd");
}
async function p2() { // 对于 async function 来说,会用 Promise.resolve() 来包装返回对象return "webabcd";
}
console.log(p1(), p2());
// Promise {<resolved>: "webabcd"} Promise {<resolved>: "webabcd"}// await 的说明(只能放在 async function 中)
async function sleep(ms) {await new Promise((resolve) => {setTimeout(resolve, ms);});
}
async function a(value, ms) {await sleep(ms);console.log(value);
}
let promise1 = a("webabcd", 1000);
console.log(promise1); // 1 秒钟之后会打印 webabcd
// 这里打印的是 Promise {<pending>}// 如果在非 async function 中,想实现 await 的功能怎么办,可以通过 promise 的 then() 来实现
async function b(value, ms) {await new Promise(r => setTimeout(r, 1000)); // 等 1 秒return value;
}
let promise2 = b("wanglei", 1000);
promise2.then(v => console.log(v));
// 1 秒钟之后会打印 wanglei// 如果一个类有 then() 方法,则这个类的实例化对象是 thenable 对象
// await 除了用于等待 Promise 对象外,也可以用于等待 thenable 对象
// await 一个 thenable 对象时,实际上等待的是这个对象的 then() 方法
class Sleep {constructor(timeout) {this.timeout = timeout;}then(resolve, reject) {setTimeout(() => resolve("diandian"), this.timeout);}
}
(async () => {console.log(await new Sleep(1000)); // 1 秒钟之后会打印 diandian
})();// 演示如何对 await 做 try/catch
let c = () => {return new Promise((resolve, reject) =>{setTimeout(()=>{let x = new Date().getTime() % 2;if (x == 0) {return resolve("fulfilled"); // 如果 try/catch await 的话,这里会正常返回数据} else if (x == 1) {return reject("rejected"); // 如果 try/catch await 的话,这里会捕获到异常}},1000);});
};
(async () => {try {// 如果走到 Promise 的 resolve() 则可以正常收到返回数据console.log("try: " + await c()); // try: fulfilled} catch(e) {// 如果走到 Promise 的 reject() 则会捕获到异常console.log("catch: " + e); // catch: rejected}
})();// 并发执行多个 Promise
let i = async () => {return Promise.resolve("iii");
};
let j = async (ms) => {return new Promise((resolve) => {setTimeout(() => resolve("jjj"), ms);});
};
let k = async (ms) => {return new Promise((resolve, reject) => {let x = new Date().getTime() % 2;if (x == 0) {setTimeout(() => resolve("kkk"), ms);} else if (x == 1) {setTimeout(() => reject("kkk"), ms);}});
};
(async () => {try {// 通过 Promise.all() 并发执行多个 Promiselet [x, y, z] = await Promise.all([i(), j(1000), k(1000)]);console.log(x, y, z); // iii jjj kkk} catch (e) {// 有一个 Promise 走到了 reject(),这里就会捕获到异常console.log(e); // kkk}
})();

源码 https://github.com/webabcd/Html5
作者 webabcd

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

app手机元素定位方式

方式一:采用uiautomatorviewer元素定位 ①这个定位方式有缺陷也就是它只能识别Android8以下的系统,8及以上的系统就无法定位了 ②位置:这个工具是位于安装的SDK下的tools文件下,我的安装路径如下③双击打开这个工具就行,再运行的页面点击 方式二:安装Appium-Inspector ①下…

从0到0.1学习实践盒子模型

从0到0.1学习实践盒子模型 盒子模型概念 预备知识margin:外边距【两个元素之间的距离】 border:边框 padding:内边距【内容区域和边框距离】 height:文本高度 width:文本宽度content-box (形象图片)content-box--只计算内容区域的宽度和高度,边框和内边距不算在内。 .b…

Leetcode 445. 两数相加 II

1.题目基本信息 1.1.题目描述 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 1.2.题目地址 https://leetcode.cn/problems/add…

Windows命令:时间延迟命令

延迟一段时间再执行下一条命令”。 一、利用ping实现延迟命令 这种延时手段是不精确的,因为每一次ping通的延迟不一样。 1、示例chcp 65001 @echo off echo 延时前:%time% ping /n 3 127.0.0.1 >nul echo 延时后:%time% pause 参数/n表示ping通的次数。127.0.0.1是本机ip…

电力施工作业绝缘手套识别系统

电力施工作业绝缘手套识别系统对电力作业人员在电力设备上进行施工作业时是否佩戴绝缘手套进行识别分析,当电力施工作业绝缘手套识别系统检测到作业人员未佩戴绝缘手套时立即抓拍存档同步回传给后台监控人员,提醒相关人员及时制止,及时规避更危险的触电事故发生。电力施工作…

sicp每日一题[2.24-2.27]

2.24-2.26没什么代码量,所以跟 2.27 一起发吧。Exercise 2.24Suppose we evaluate the expression (list 1 (list 2 (list 3 4))). Give the result printed by the interpreter, the corresponding box-and-pointer structure, and the interpretation of this as a tree (as…

ansible-cmdb简单使用

1、安装 官方:https://ansible-cmdb.readthedocs.io/en/latest/ wget https://github.com/fboender/ansible-cmdb/releases/download/1.27/ansible-cmdb-1.27-2.noarch.rpm yum -y install ./ansible-cmdb-1.27-2.noarch.rpm2、使用 首先,为你的主机生成 Asible 输出: mkdir…

第三周作业(海报➕二维码)

二维码可以在那个网站上面学习数学知识

MySQL线上问题排查

线上问题排查 一、线上故障排查的思路与方向 在程序开发与运行过程中,出现Bug问题的几率无可避免,数据库出现问题一般会发生在下述几方面:①撰写的SQL语句执行出错,俗称为业务代码Bug。 ②开发环境执行一切正常,线上偶发SQL执行缓慢的情况。 ③线上部署MySQL的机器故障,如…

ToEasy利用99元阿里云服务器内网穿透的实操过程

一、准备工作: 1、阿里云99元服务器(安装Windows)或者其他windows云服务器 2、frp内网穿透软件 3、数据库MSSQL 2014绿色版 4、ToEasy服务器和客户端软件 二、内网穿透设置 解压frp软件后,打开配置文件frps.toml和frpc.toml进行设置。 1、服务端(frps.toml)#bindAddr = &…

PARTIV-Oracle数据库存储结构-逻辑存储结构

12.逻辑存储结构 12.1. 逻辑存储结构简介 Oracle数据库为数据库中的所有数据分配逻辑空间。数据库空间分配的逻辑单位是数据块、区间、段和表空间。在物理层面,数据存储在磁盘上的数据文件中(见第11章“物理存储结构”)。数据文件中的数据存储在操作系统块中。图12-1是物理和…

第三周作业(海报)

我所选的主题是数字。运用数字王国的标题,吸引小学生的注意。学生们可以在数字王国中探索,从低年级的认识数字开始培养起对数学的兴趣,为以后的数学学习铺垫好坚实的基础。在本张海报中,我运用了文字、图片、插画、数字这三种素材,并且插画颜色丰富、且进校园生活和数字,…