(async () => {
const iterator = asyncRangeGenerator(1, 3);
console.log(iterator.next()); // Promise
console.log(await iterator.next()); // Object {value: 2, done: false}
console.log(await iterator.next()); // Object {value: 3, done: false}
console.log(await iterator.next()); // Object {value: undefined, done: true}
const iterator2 = asyncRangeGenerator(1, 5);
for await (const num of iterator2) {
console.log(num);
}
})();
function delay(timeout, value) {
return new Promise(resolve => setTimeout(() => resolve(value), timeout));
}
async function* asyncRangeGenerator(start, end) {
while (start <= end) {
yield delay(1000, start++);
}
}