面试题答案
一键面试// 假设存在多个异步函数
async function asyncFunction1() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Result of asyncFunction1');
}, 1000);
});
}
async function asyncFunction2() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Result of asyncFunction2');
}, 1500);
});
}
async function asyncFunction3() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Result of asyncFunction3');
}, 2000);
});
}
// 假设asyncFunction4依赖于asyncFunction1和asyncFunction2的结果
async function asyncFunction4(result1, result2) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(`Result of asyncFunction4 with ${result1} and ${result2}`);
}, 1000);
});
}
async function main() {
try {
// 并发执行asyncFunction1和asyncFunction2
const [result1, result2] = await Promise.all([asyncFunction1(), asyncFunction2()]);
// 顺序执行依赖于前面结果的asyncFunction4
const result4 = await asyncFunction4(result1, result2);
// 并发执行asyncFunction3
const result3 = await asyncFunction3();
console.log([result1, result2, result3, result4]);
} catch (error) {
console.error('An error occurred:', error);
}
}
main();
在上述代码中:
- 使用
Promise.all
并发执行asyncFunction1
和asyncFunction2
,并获取它们的结果。 - 利用前面获取的结果顺序执行
asyncFunction4
。 - 单独并发执行
asyncFunction3
。 - 使用
try...catch
块捕获并处理在任何异步函数执行过程中可能出现的错误。最后将所有结果输出。
这样就实现了并发和顺序混合调用,并妥善处理了错误。