ES6语法笔记
2024-10-09 12:31:14
迭代器
// log
let arr = ['一', '二', '三']
let iter = arr[Symbol.iterator]()
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
// log
let args = {
info: 'some country or region',
list: ['china', 'USA', 'china hk'],
}
for (let item of args) {
console.log(item)
}
// log
let args = {
info: 'some country or region',
list: ['china', 'USA', 'china hk'],
[Symbol.iterator]() {
// 索引变量
let index = 0
return {
next: () => {
if (index < this.list.length) {
const result = { value: this.list[index], done: false }
index++
return result
} else {
return { value: undefined, done: true }
}
},
}
},
}
for (let item of args) {
console.log(item)
}
生成器
// log
function* gen() {
console.log('gen')
}
let iterator = gen()
iterator.next()
// log
function* gen() {
console.log('窗前明月光')
yield
console.log('疑是地上霜')
yield
console.log('举头望明月')
yield
console.log('低头思故乡')
yield
}
// 测试next()调用
let iterator = gen()
iterator.next()
iterator.next()
iterator.next()
iterator.next()
// log
function* gen() {
console.log('窗前明月光')
yield 'A'
console.log('疑是地上霜')
yield 'B'
console.log('举头望明月')
yield 'C'
console.log('低头思故乡')
yield 'D'
console.log('完')
}
// 测试next()调用的返回值
let iter = gen()
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
// log
function* gen(param) {
console.log('窗前明月光' + param)
let a = yield 'A'
console.log('疑是地上霜' + a)
let b = yield 'B'
console.log('举头望明月' + b)
let c = yield 'C'
console.log('低头思故乡' + c)
let d = yield 'D'
}
let iter = gen('param参数')
console.log(iter.next('next参数一'))
console.log(iter.next('next参数二'))
console.log(iter.next('next参数三'))
console.log(iter.next('next参数四'))
生成器与异步
setTimeout(() => {
// log-async
console.log(1)
setTimeout(() => {
// log-async
console.log(2)
setTimeout(() => {
// log-async
console.log(3)
}, 100)
}, 100)
}, 100)
遇到 yield,就要停一下。
function* gen() {
yield one()
yield two()
yield three()
}
function one() {
setTimeout(() => {
// log-async
console.log(1)
}, 100)
}
function two() {
setTimeout(() => {
// log-async
console.log(2)
}, 100)
}
function three() {
setTimeout(() => {
// log-async
console.log(3)
}, 100)
}
let iter = gen()
iter.next()
iter.next()
iter.next()
function* gen() {
let data1 = yield one()
let data2 = yield two()
let data3 = yield three()
// log-async
console.log(data3)
}
let iter = gen()
function one() {
setTimeout(() => {
let data = '用户数据'
// log-async
iter.next(data)
}, 100 * Math.random())
}
function two() {
setTimeout(() => {
let data = '订单信息'
// log-async
iter.next(data)
}, 100 * Math.random())
}
function three() {
setTimeout(() => {
let data = '产品信息'
// log-async
iter.next(data)
}, 100 * Math.random())
}
iter.next()
Promise
封装 Ajax
const p = new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest()
xhr.open('GET', 'https://api.apiopen.top/get')
xhr.send()
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(xhr.response)
} else {
reject(xhr.status)
}
}
}
})
p.then(null, (err) => {
// log-async
console.log(err)
})
细节:发出承诺起即new Promise()
后,就开始执行里面的代码了,.then
的作用将回调传进+链式调用。
new Promise((resolve, reject) => {
// log-async
console.log('开始同步了')
setTimeout(() => {
// log-async
console.log('开始异步了')
resolve(0)
}, 100)
})
then 方法返回一个 Promise
如果 then 里面不 return
- 返回之前的 promise
如果 then 里面 return
- return 非 promise:返回之前的 promise
- return promise:返回新的 promise
// log
let p = new Promise((resolve, reject) => {
console.log('开始同步了')
})
let res = p.then()
console.log(res[Symbol.toStringTag])
相关原理见promise 原理
Set
最新文章
- 【项目记录】-液化气配送app android版
- C++_系列自学课程_第_7_课_数组_《C++ Primer 第四版》
- 文本编辑器VIM/VI
- Silverlight中文本框添加回车事件后,换行无法清除的解决方法
- 5.5---整数A转成整数B(CC150)
- NGUI之UIRoot屏幕分辨率自适应
- 去除重复命令uniq
- Retina
- VS 2012 插件卸载(删除自己安装的插件)
- 子进程管理模块subprocess
- 在线试听功能(前端直接略过吧,适合javaEE后台开发的)
- 是否有必要学习使用纯Verilog写一个SDRAM控制器
- java线程间通信之通过管道进行通信
- windows代码,路径分割
- [物理学与PDEs]第2章习题7 一维不可压理想流体的求解
- webToImage (网页转图片)模块试用分享
- 045 介绍UDF,以及完成大小写的转换
- AGC015 C-Nuske vs Phantom Thnook AtCoder 思路 前缀和
- Binary Tree ZigZag Level Order Traversal leetcode java
- grandstack 基于graphql&;&;react&;&; apollo&;&; neo4j 的全栈开发工具