MST

星途 面试题库

面试题:Node.js中Promise错误处理的基础方式

在Node.js的Promise使用中,常见的错误处理方式有哪些?请举例说明.then()和.catch()的用法,以及它们在处理错误时的区别。
19.7万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

常见错误处理方式

  1. 使用 .catch() 全局捕获错误:在Promise链的最后添加 .catch() 来捕获整个链中任何被拒绝的Promise产生的错误。
  2. .then() 中处理错误:在 .then() 回调函数中通过 try...catch 块捕获同步代码中的错误,同时也可以通过返回一个被拒绝的Promise来处理异步错误。

.then().catch() 用法及区别

  1. .then() 用法
    • 接受两个回调函数作为参数,第一个处理成功的结果,第二个处理失败的结果(不推荐使用第二个参数处理错误,而是推荐用 .catch())。
    • 示例:
const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('成功结果');
    }, 1000);
});

promise.then(
    value => {
        console.log('成功:', value);
    },
    error => {
        console.log('失败:', error);
    }
);
  1. .catch() 用法
    • 用于捕获Promise链中任何被拒绝的Promise产生的错误。
    • 示例:
const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('失败原因');
    }, 1000);
});

promise
  .then(value => {
        console.log('成功:', value);
    })
  .catch(error => {
        console.log('捕获到错误:', error);
    });
  1. 区别
    • .then() 的第二个参数:只能捕获当前 .then() 前面直接被拒绝的Promise的错误,对于Promise链中其他地方产生的错误无法捕获。而且这种方式使得代码结构不够清晰,错误处理逻辑和成功处理逻辑混在一起。
    • .catch():可以捕获整个Promise链中任何被拒绝的Promise产生的错误,统一在一个地方处理错误,使代码结构更清晰,错误处理更集中。例如:
const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('第一个Promise错误');
    }, 1000);
});

const promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('第二个Promise成功');
    }, 1500);
});

promise1
  .then(() => promise2)
  .then(value => {
        console.log('成功:', value);
    })
  .catch(error => {
        console.log('捕获到错误:', error);
    });

在这个例子中,.catch() 可以捕获 promise1 被拒绝产生的错误,如果使用 .then() 的第二个参数则无法捕获 promise1 产生的错误。