路很长,一步一步走,走累了休息一下。
>> 对promise熟悉吗,那说一下生成器吧😂
<< 英文名叫generator
和普通函数不同的普通函数只能一下走完,生成器函数可以暂停,简单的说就是可以手动让函数一步一步一步的走下去。
生成器会构造一个迭代器(iterator)
let a = {}
console.log(a[Symbol.iterator]); // undefined
const b = Object.keys(a)
console.log(b[Symbol.iterator]); // [Function: values]
console.log(b[Symbol.iterator]()); // Object [Array Iterator] {}
function* foo(x) {
console.log("start");
const abc = x * 2;
var y = x * (yield abc);
yield y;
yield "end";
return 123;
}
const it = foo(3);
// 启动 直到(yield abc)
const res = it.next();
//返回abc的值
console.log(res); // { value: 6, done: false }
// y = x * 9 这里的传参让 (yield abc) = 9
console.log(it.next(9)); //{ value: 27, done: false }
// 返回y
console.log(it.next("abc")); // { value: 'end', done: false }
// 返回return的值 如果没有return就是undefined
console.log(it.next()); // { value: 123, done: true }