MST

星途 面试题库

面试题:TypeScript迭代器与异步操作的结合

在TypeScript项目中,有一个场景需要从多个异步数据源(例如多个API调用)获取数据,然后按顺序遍历这些异步获取的数据。请基于迭代器的概念,设计并实现一个解决方案,以优雅地处理这种异步数据遍历的需求,包括处理可能出现的错误情况。
25.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 模拟异步数据源函数,返回Promise
function asyncDataSource1(): Promise<number> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(1);
        }, 1000);
    });
}

function asyncDataSource2(): Promise<number> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(2);
        }, 1500);
    });
}

function asyncDataSource3(): Promise<number> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            reject(new Error('模拟错误'));
        }, 2000);
    });
}

// 定义一个生成器函数,返回异步迭代器
function* asyncDataGenerator() {
    yield asyncDataSource1();
    yield asyncDataSource2();
    yield asyncDataSource3();
}

// 异步遍历函数
async function asyncTraversal() {
    const asyncIterator = asyncDataGenerator();
    let result;
    while (true) {
        const { value, done } = asyncIterator.next();
        if (done) break;
        try {
            result = await value;
            console.log('处理结果:', result);
        } catch (error) {
            console.error('处理错误:', error);
        }
    }
}

asyncTraversal();

上述代码中:

  1. 首先定义了几个模拟的异步数据源函数 asyncDataSource1asyncDataSource2asyncDataSource3,它们返回 Promise
  2. 接着使用生成器函数 asyncDataGenerator 来生成一个异步迭代器,将所有异步数据源包装到迭代器中。
  3. 最后通过 asyncTraversal 函数来进行异步遍历,在遍历过程中使用 try...catch 块来捕获可能出现的错误。