MST

星途 面试题库

面试题:JavaScript中利用async/await优化并发函数调用及处理错误

有多个异步函数,它们返回Promise,并且这些函数之间可能存在依赖关系(部分函数需要在其他函数完成后执行)。请使用async/await语法实现这些函数的并发和顺序混合调用,并妥善处理其中可能出现的错误,最后输出所有函数执行结果。
47.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
// 假设存在多个异步函数
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();

在上述代码中:

  1. 使用Promise.all并发执行asyncFunction1asyncFunction2,并获取它们的结果。
  2. 利用前面获取的结果顺序执行asyncFunction4
  3. 单独并发执行asyncFunction3
  4. 使用try...catch块捕获并处理在任何异步函数执行过程中可能出现的错误。最后将所有结果输出。

这样就实现了并发和顺序混合调用,并妥善处理了错误。