面试题答案
一键面试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);
});
}
上述代码中:
callAPIs
函数定义了一个数组apiCalls
,数组中每个元素都是一个异步函数,分别对应不同的异步API调用。- 在每个异步函数中,使用
try...catch
块捕获可能抛出的错误,并将成功结果和错误信息分别存入successResults
和errorMessages
数组。 - 使用
Promise.all
并行执行所有的异步API调用。 - 最后返回一个包含
successResults
和errorMessages
的对象。
请注意,在实际应用中,someAsyncAPI1
和 someAsyncAPI2
应替换为真实的异步API调用。