MST
星途 面试题库

面试题:JavaScript 异步迭代器与 Promise 的交互

假设有一个函数 `fetchData`,它返回一个 Promise,该 Promise 解析后得到一个包含多个对象的数组。每个对象有一个 `id` 和 `value` 字段。请使用异步迭代器,在获取到数据后,按顺序输出每个对象的 `value`,并且每次输出间隔 2 秒。同时,如果在迭代过程中某个对象的 `id` 为偶数,暂停迭代 3 秒后再继续。
23.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
async function fetchData() {
    // 模拟异步获取数据
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve([
                { id: 1, value: 'value1' },
                { id: 2, value: 'value2' },
                { id: 3, value: 'value3' }
            ]);
        }, 1000);
    });
}

async function printValues() {
    const data = await fetchData();
    const asyncIterator = data[Symbol.asyncIterator]();
    let result;
    while (!(result = await asyncIterator.next()).done) {
        const { id, value } = result.value;
        console.log(value);
        if (id % 2 === 0) {
            await new Promise(resolve => setTimeout(resolve, 3000));
        }
        await new Promise(resolve => setTimeout(resolve, 2000));
    }
}

printValues();