生成器其实就是一个特殊的函数。
创建生成器
JavaScript
function * gen(){
console.log("111");
// yield 函数代码的分割符
let one = yield '一只没有耳朵';
console.log(one)
console.log("222");
let two = yield '一只没有尾巴';
console.log(two)
console.log("333");
yield '真奇怪';
console.log("444");
}调用生成器
JavaScript
let iterrator = gen()
// next方法可以传参
iterrator.next()异步编程
整个JS是异步单线程的,文件操作,网络操作...
案例
1s 后控制台输出111 2s 之后输出222 3s之后输出333
普通方案
JavaScript
setTimeout(()=>{
console.log(111);
setTimeout(()=>{
console.log(222)
setTimeout(()=>{
console.log(333)
},3000)
},2000)
},1000)
// 回调地狱生成器方案
JavaScript
function one() {
setTimeout(() => {
console.log(111)
iterator.next()
}, 1000)
}
function two() {
setTimeout(() => {
console.log(222)
iterator.next()
}, 2000)
}
function three() {
setTimeout(() => {
console.log(333)
iterator.next()
}, 3000)
}
// 创建生成器
function* gen() {
yield one();
yield two();
yield three();
}
let iterator = gen()
iterator.next()