可选
init: number = 0初始值
可选
step: number = 1每次增加的值
可选
end: number = Number.MAX_SAFE_INTEGER最大值;包左不包右原则,所以最后一个值是小于end的
// ----------- 什么参数都不传 -----------
const id = idGen();
id.next().value; // 0
id.next().value; // 1
id.next().value; // 2
id.next(10).value; // 12
id.next().value; // 13
// ----------- 传init与step -----------
const id = idGen(10, 2);
id.next().value; // 10
id.next(3).value; // 13
id.next(10).value; // 23
id.next().value; // 25
// ----------- next第一次传值无效 -----------
const id = idGen();
id.next(11).value; // 0 // 第一次next传值无效,因为next只能传给下一个yield,而第一次之前没有yield
id.next().value; // 1
id.next().value; // 2
// ----------- 使用for of迭代 -----------
const iter = idGen();
let curId = 0;
for (const id of iter) {
id; // curId++
if (id > 10) {
iter.return(); // 使用Generator.prototype.return强制中断生成器
}
}
// ----------- 设置max -----------
const gen = idGen(0, 1, 3);
const ids: number[] = [];
for (const id of gen) {
ids.push(id);
}
ids; // [0, 1, 2]
gen.next(); // { done: true, value: undefined }
// ----------- 倒序生成 -----------
const gen = idGen(2, -1, -1);
const ids: number[] = [];
for (const id of gen) {
ids.push(id);
}
ids; // [0, 1, 2].reverse()
gen.next(); // { done: true, value: undefined }
创建一个自增id生成器
第一次next传值是无效的 解决方法参考https://es6.ruanyifeng.com/#docs/generator#next-方法的参数