MST

星途 面试题库

面试题:JavaScript中async/await与Promise的深度结合应用

假设有三个异步函数`asyncFunction1`、`asyncFunction2`、`asyncFunction3`,它们依次依赖前一个函数的返回结果进行操作。请使用`async/await`和`Promise`来实现这一系列异步操作,并处理可能出现的错误,同时解释`async/await`在这种场景下相较于单纯使用`Promise`的优势。
45.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

使用async/await实现

async function runAsyncFunctions() {
    try {
        const result1 = await asyncFunction1();
        const result2 = await asyncFunction2(result1);
        const result3 = await asyncFunction3(result2);
        return result3;
    } catch (error) {
        console.error('发生错误:', error);
    }
}

使用Promise实现

function runAsyncFunctionsWithPromise() {
    return asyncFunction1()
      .then(result1 => asyncFunction2(result1))
      .then(result2 => asyncFunction3(result2))
      .catch(error => {
            console.error('发生错误:', error);
        });
}

async/await相较于单纯使用Promise的优势

  1. 代码可读性更高async/await语法糖使得异步代码看起来更像同步代码,顺序执行的逻辑一目了然,而Promise链式调用在多个异步操作时,链式会变得冗长且嵌套复杂,可读性下降。
  2. 错误处理更简洁:在async/await中,使用try...catch块可以统一捕获整个异步操作过程中的错误,相比Promise链式调用中每个then后都要跟catch或者在最后统一写catchasync/await的错误处理方式更符合传统同步代码的错误处理习惯,更直观。