一个"for await ...of"语句在Node.js中的例子
首先,看一个Iterators的例子
class RandomNumberGenerator { [Symbol.iterator]() { return { next: () => { return { value: Math.random()} } } } } const rand = new RandomNumberGenerator(); for (const random of rand) { console.log(random); if (random < 0.1) break; }
再看一个Async Iterators的例子
const simulateDelay = (val, delay) => new Promise((resolve) => setTimeout(() => resolve(val), delay)); class RandomNumberGenerator { [Symbol.asyncIterator]() { return { next: async () => { return simulateDelay({ value: Math.random()}, 200); // 延迟200毫秒后返回值 } } } } const rand = new RandomNumberGenerator(); (async () => { for await (const random of rand) { console.log(random); if (random < 0.1) break; } })();
注释:
Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被for...of循环使用
Symbol.asyncIterator 符号指定了一个对象的默认异步迭代器。如果一个对象设置了这个属性,它就是异步可迭代对象,可用于for await...of循环
参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator