生成器函数(纯回调函数)
function * gen(){
console.log(111);
yield '第一次'; //yield函数代码的分隔符
console.log(222);
yield '第二次';
console.log(333);
yield '第三次';
}
let iterator = gen() //执行后不会立刻执行需要 iterator.next()调用
console.log(iterator.next()); // 111 {value:'第一次', done: false}
console.log(iterator.next()); // ...
console.log(iterator.next()); // ...
console.log(iterator.next()); // 111 {value: undefined, done: true}
// 也可使用for of调用
for (const v of gen()) {
console.log(v);
}
示例代码(先获取用户信息=>商品信息=>结算)
function one() {
setTimeout(() => {
console.log('获取用户信息成功');
let data = "用户信息"
iterator.next(data) //给下一次执行传参
}, 1000)
}
function two(data) {
setTimeout(() => {
console.log('得到'+ data);
let data1 = "商品信息"
iterator.next(data1)
}, 1000)
}
function three(data) {
setTimeout(() => {
console.log('得到'+ data);
console.log('结算');
iterator.next()
}, 1000)
}
function * fn() {
let userDate = yield one() //userDate就是接收到的参数,然后传给two()
let infoDate = yield two(userDate)
yield three(infoDate)
}
const iterator = fn()
iterator.next() // 让1,2,3依次执行