一个"for await ...of"语句在Node.js中的例子

一个"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://www.mikealche.com/software-development/a-simple-explanation-of-the-for-await-of-statement-in-node-js

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator

原文地址:https://www.cnblogs.com/cathy1024/p/13692179.html