# generator实现
简单generator实现
- 在编译阶段,把yield后面的语句放入队列中
- 提供一个next方法顺序执行出队列操作
function* genF() {
yield new Promise((resolve, reject) => {
console.log('p1');
setTimeout(() => {
resolve(name);
}, 1000);
});
yield 1;
}
function markGenerator() {
// yield队列
const yieldArr = [];
yieldArr.push(new Promise((resolve, reject) => {
console.log('p1');
setTimeout(() => {
resolve(name);
}, 1000);
}));
yieldArr.push(1);
// 空函数,提供next方法
function fn() {
// 当前执行次序
this.index = 0;
}
fn.prototype.next = function() {
const { index } = this;
// 超出执行范围done为ture
if (index >= yieldArr.length) return {done: true}
const result = {
done: index === yieldArr.length - 1,
value: yieldArr[index]
};
// 执行次序指向下一处
this.index++;
return result;
}
return new fn;
}