MST

星途 面试题库

面试题:TypeScript 中 Async/Await 与错误处理

编写一个 TypeScript 函数,使用 `async/await` 进行异步操作,该函数需要调用多个异步 API,并且每个 API 调用都可能抛出错误。要求实现全面的错误捕获与处理机制,使得在任何一个 API 调用失败时,能够正确记录错误并继续执行后续可执行的操作(如果有),最后返回一个包含所有成功结果和错误信息的对象。
17.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
async function callAPIs(): Promise<{ successResults: any[]; errorMessages: string[] }> {
    const successResults: any[] = [];
    const errorMessages: string[] = [];

    const apiCalls = [
        async () => {
            try {
                const result = await someAsyncAPI1();
                successResults.push(result);
            } catch (error) {
                errorMessages.push(`API1 错误: ${error.message}`);
            }
        },
        async () => {
            try {
                const result = await someAsyncAPI2();
                successResults.push(result);
            } catch (error) {
                errorMessages.push(`API2 错误: ${error.message}`);
            }
        },
        // 可以继续添加更多的异步API调用
    ];

    await Promise.all(apiCalls.map(call => call()));

    return { successResults, errorMessages };
}

// 模拟异步API
async function someAsyncAPI1(): Promise<any> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            Math.random() > 0.5? resolve('API1成功结果') : reject(new Error('API1失败'));
        }, 1000);
    });
}

async function someAsyncAPI2(): Promise<any> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            Math.random() > 0.5? resolve('API2成功结果') : reject(new Error('API2失败'));
        }, 1500);
    });
}

上述代码中:

  1. callAPIs 函数定义了一个数组 apiCalls,数组中每个元素都是一个异步函数,分别对应不同的异步API调用。
  2. 在每个异步函数中,使用 try...catch 块捕获可能抛出的错误,并将成功结果和错误信息分别存入 successResultserrorMessages 数组。
  3. 使用 Promise.all 并行执行所有的异步API调用。
  4. 最后返回一个包含 successResultserrorMessages 的对象。

请注意,在实际应用中,someAsyncAPI1someAsyncAPI2 应替换为真实的异步API调用。