ES6补充-异步与等待、符号、迭代器、代理以及生成器
目录
异步与等待
async 异步
await 等待
Symbol 符号
迭代器
生成器
proxy 代理
异步与等待
async 异步
async作为一个关键字放到函数前面,用于表示函数是一个异步函数。async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。
// 用 asyc 装饰函数 返回的是promise对象async function say() {return "你好ES6"}say().then(res => console.log(res))console.log(say());
运行结果:
个人理解:用async装饰了say方法,所以使用say方法返回的是一个Promise对象。而Promise对象可以用.then来调用,于是在控制台输出了“你好ES6”。
await 等待
async 函数中可能会有await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。
await 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。
function say(msg, time) {return new Promise((resolve, reject) => {setTimeout(() => resolve(msg), time)})}// 2秒后说你好// 3秒后说很高兴认识你// 定义async函数async function doit() {// await会等待say函数执行完之后再向下执行var msg1 = await say("你好", 2000)console.log(msg1);var msg2 = await say("很高兴认识你", 3000)console.log(msg2);return msg1 + msg2}doit().then(res => console.log(res))
运行结果:
个人理解:先创建了一个say方法,say方法有两个形参,返回的是一个promise对象。async装饰了doit方法,里面的msg1后面的await等到了两秒之后的promise对象并返回了promise的运行结果,于是程序运行了两秒之后,控制台输出了“你好”,接下来msg2如法炮制,又过了三秒后,控制台输出了“很高兴认识你”和“你好很高兴认识你”
Symbol 符号
Symbol 是一种新的数据类型,它的值是唯一的,不可变的
迭代器
迭代器允许每次访问数据集合的一个元素,当指针指向数据集合最后一个元素时,迭代器便会退出。它提供了 next() 函数来进行迭代,这个方法返回一个包含 done 和 value 属性的对象。
可迭代对象都拥有迭代器(可以被for of遍历的对象都是可迭代对象)String Array Set Map
var arr = [7,8,9]// 获取数组的迭代器var itr = arr[Symbol.iterator]()
这是使用了next函数,可以看出返回值是一个对象,value是当前迭代的对象。当数组遍历完之后,value的值是undefined,done的值是true
生成器
Generator 函数是 ES6 的新特性,它允许一个函数返回的可遍历对象生成多个值。
在使用中你会看到 * 语法和一个新的关键词 yield
- 普通函数前面添加 *
- 通过yield关键字来控制生成
- 最终函数执行 返回一个可迭代元素
function* gen() {// 当生成器函数语言碰到yield 函数就会暂停,返回值yield "aaa";yield "bbb";yield "ccc";}// 执行完毕生成的是迭代器var list = gen();// list.next();// 可以通过next方法获取yield返回的值和状态// 遍历迭代器for (let v of list) {console.log(v)}
运行结果:
proxy 代理
- Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。
- Proxy(target, handler), 这里的 handler 可以是 set get has hasOwn keys 等等方法
// 代理就是对原有对象target 二次加工var obj = {"name":"小菜粥",age:18};// 用o来代理objvar o = new Proxy(obj,{// 当获取o对象的属性值执行get方法get:function(target,prop){// 如果属性名在原对象里面if(prop in target){// 返回原对象属性return target[prop] }else{// 否则返回 "不在return "不在";}},set:function(target,prop,value){if(prop==="age"){if(value>200||value<0){// 发送一个(范围)错误throw RangeError('这个年龄恐怕不是人类!')}else{target[prop] = value;}}else{target[prop] = value;}}})
o.xx 会执行get方法
o.xx = "yy" 会执行set方法
欢迎大佬指正给予建议
ES6补充-异步与等待、符号、迭代器、代理以及生成器相关推荐
- ES6中的迭代器(Iterator)和生成器(Generator)
用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作 ...
- 深入解析ES6中的迭代器(Iterator)和生成器(Generator)
用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作 ...
- 一次性掌握ES6/ES7异步处理
一次性掌握ES6/ES7异步处理 假定一个场景,等女朋友睡起来出去逛街,超过5s就不等了,自己打游戏了 ... ES6 Promise 处理方式 promise 写法 promise链式调用方法,只有 ...
- ES6中的迭代器(Iterator)和生成器(Generator)(一)
用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作 ...
- ES6/7 异步编程学习笔记
前言 在ES6的异步函数出现之前,Js实现异步编程只有settimeout.事件监听.回调函数等几种方法 settTmeout 这种方法常用于定时器与动画的功能,因为其本质上其实是浏览器的WebAPI ...
- 十八、可迭代对象、迭代器对象和生成器
可迭代对象.迭代器对象和生成器 一 可迭代对象 二 迭代器对象 三 迭代器优缺点 三 for循环原理 四 异常处理 4.1 什么是异常 4.2 异常操作 4.2.1 语法 4.2.2 实际操作 4.2 ...
- python 生成器 迭代器 区别_Python生成器和迭代器的区别
What is the difference between iterators and generators? Some examples for when you would use each c ...
- 【es6】教程 Symbol数据以及迭代器和生成器
[es6]学习 知识点1,Symbol的介绍与创建 知识点2,向对象添Symbol类型的属性 知识点3,迭代器,Iterator 知识点4,生成器-函数 生成器函数的参数传递 生成器函数实例 生成器函 ...
- python迭代器生成器使用技巧(1):遍历、代理、生成器创建迭代、反向迭代
1. 手动遍历迭代器 next() 遍历一个可迭代对象中的所有元素,但是却不想使用for循环.为了手动的遍历可迭代对象,使用 next() 函数并在代码中捕获 StopIteration 异常. 通常 ...
最新文章
- 服务器Linux与Windows固件,Linux与windows服务器系统的区别
- 公司考勤模块集成百度地图SDK
- 使用VMware Server迁移证券公司的Netware服务器
- 电路中滤波电容和退耦电容_电子电路中电容的作用,滤波消抖,充放电,耦合,退耦...
- shell 脚本逻辑判断
- Actor-ES框架:Ray-Handler之CoreHandler编写
- 深入探索 Java 热部署
- 服务器运行容器工具大盘点!
- opencv roberts算子_图像之HOG特征描述算子-行人检测
- linux网络编程socket,Linux网络编程入门
- 漫画:程序员真是太太太太太有趣了!
- 供应商否认iPhone 12延迟推出传闻 称生产按计划进行
- vue 项目配合zepto的巨坑
- dubbo 异步回调
- 基于ZigBee的高压开关SF6气体泄漏监测系统
- oracle12c ora01017,ORACLE 12C 之 ORA-01017
- cad插件_还不会用CAD插件?55款超实用CAD插件大合集!无套路直接送你
- 浅谈游戏《底特律:变人》
- 微信开放平台开发第三方授权登陆(三):Android客户端
- Spring Web Flow 2中的流管理持久性