// // 函数代码分隔符
// function * gen(){
// // console.log(‘hello generator‘);
// }
// let iterator = gen();
// // console.log(iterator);
// // iterator.next(); // hello generator
// 函数代码分隔符
function * gen(){
// console.log(111);
yield ‘一只没有耳朵‘;
// console.log(222);
yield ‘一只没有尾巴‘;
// console.log(333);
yield ‘真奇怪‘;
// console.log(444);
}
// let iterator = gen();
// iterator.next(); // 111
// iterator.next(); // 222
// iterator.next(); // 333
// iterator.next(); // 444
// 遍历
for(let v of gen()){
console.log(v);
}
function * gen(arg){
console.log(arg);
let one = yield 111;
console.log(one);
yield 222;
yield 333;
}
let iterator = gen(‘AAA‘);
// console.log(iterator);
console.log(iterator.next());
// next 方法可以传入 实参
console.log(iterator.next(‘BBB‘));
// console.log(iterator.next());
// console.log(iterator.next());
---------------------------------
// 回调地域
// 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);
iterator.next();
}
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();