MST
星途 面试题库

面试题:Node.js异步编程之Promise与异常处理

使用Promise实现一个异步任务序列,该序列包含三个异步操作,第二个操作依赖第一个操作的结果,第三个操作依赖第二个操作的结果。同时,要处理每个异步操作可能出现的异常,并阐述如何使用Promise的特性来优雅地管理异步流程和错误处理。
43.8万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
function asyncOperation1() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            Math.random() > 0.5? resolve('操作1结果') : reject('操作1错误');
        }, 1000);
    });
}

function asyncOperation2(result1) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            Math.random() > 0.5? resolve(result1 + ' -> 操作2结果') : reject('操作2错误');
        }, 1000);
    });
}

function asyncOperation3(result2) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            Math.random() > 0.5? resolve(result2 + ' -> 操作3结果') : reject('操作3错误');
        }, 1000);
    });
}

asyncOperation1()
  .then(result1 => asyncOperation2(result1))
  .then(result2 => asyncOperation3(result2))
  .then(finalResult => {
        console.log(finalResult);
    })
  .catch(error => {
        console.error('捕获到错误:', error);
    });

使用Promise特性管理异步流程和错误处理的阐述

  1. 链式调用:Promise 通过 .then() 方法实现链式调用,使得异步操作可以按顺序执行,并且每个 .then() 方法返回一个新的 Promise,这样就可以方便地将多个异步操作串联起来。在上述代码中,asyncOperation1() 的结果作为参数传递给 asyncOperation2()asyncOperation2() 的结果又作为参数传递给 asyncOperation3(),实现了异步任务的序列执行。
  2. 错误处理:Promise 的 .catch() 方法用于捕获整个 Promise 链中任何一个环节抛出的错误。只要 Promise 链中有一个 Promise 被 reject,后续的 .then() 方法就不会被执行,而是直接跳转到最近的 .catch() 方法进行错误处理。这样可以集中处理异步操作中可能出现的各种错误,避免了层层嵌套的错误处理代码,使代码结构更加清晰。