MST

星途 面试题库

面试题:JavaScript迭代器与异步操作结合的自定义实现

假设有一系列异步任务,每个任务返回一个Promise对象,代表从不同的API获取的数据。请自定义一个异步迭代器,使得可以按顺序依次处理这些异步任务,并在所有任务完成后,以迭代器的方式返回所有任务的结果。要求合理处理`next()`方法、`await`操作以及正确设置`done`属性。
34.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function createAsyncIterator(tasks) {
    let index = 0;
    return {
        async next() {
            if (index >= tasks.length) {
                return { done: true, value: undefined };
            }
            const result = await tasks[index];
            index++;
            return { done: index >= tasks.length, value: result };
        }
    };
}

// 示例使用
const apiTasks = [
    new Promise(resolve => setTimeout(() => resolve('Data from API 1'), 1000)),
    new Promise(resolve => setTimeout(() => resolve('Data from API 2'), 1500)),
    new Promise(resolve => setTimeout(() => resolve('Data from API 3'), 2000))
];

const asyncIterator = createAsyncIterator(apiTasks);

async function consumeIterator() {
    let { done, value } = await asyncIterator.next();
    while (!done) {
        console.log(value);
        ({ done, value } = await asyncIterator.next());
    }
}

consumeIterator();