es6
es6生成器函数实例_异步编程
- yield关键字,使生成器函数执行暂停
- function*生成器函数语法
- iterator.next()迭代器类的方法,获取当前元素,并指向下一个元素
- let声明变量,块级作用域
- setTimeout指定的毫秒数后调用函数
// 回调地狱
setTimeout(() => {
console.log(111);
setTimeout(() => {
console.log(222);
setTimeout(() => {
console.log(333);
}, 3000);
}, 2000);
}, 1000);
//异步回调
function one() {
setTimeout(() => {
console.log(111);
iterator.next();
}, 1000);
}
function two() {
setTimeout(() => {
console.log(222);
iterator.next();
}, 2000);
}
function three() {
setTimeout(() => {
console.log(333);
}, 3000);
}
//生成器函数
function * gen(){
yield one();
yield two();
yield three();
}
// 调用生成器函数
let iterator=gen();
iterator.next();
// 模拟获取 用户数据 订单数据 商品数据
function getUsers(){
setTimeout(() => {
let data='用户数据';
// 调用next方法,并且将数据传入
iterator.next(data);
}, 1000);
}
function getOrders(){
setTimeout(() => {
let data='订单数据';
iterator.next(data);
}, 1000);
}
function getGoods(){
setTimeout(() => {
let data='商品数据';
iterator.next(data);
}, 1000);
}
//生成器函数
function * gen(){
let users=yield getUsers();
console.log(users);
let orders=yield getOrders();
console.log(orders);
let goods=yield getGoods();
console.log(goods);
}
// 调用生成器函数
let iterator=gen();
iterator.next();