如何在Promise链中处理Promise.reject()抛出的错误?

简介: 如何在Promise链中处理Promise.reject()抛出的错误?

在Promise链中,可以通过多种方式处理Promise.reject()抛出的错误,以下是一些常见的方法:

使用catch方法

在Promise链中,catch方法专门用于捕获链中任何一个Promise被拒绝时抛出的错误。当Promise.reject()被调用时,控制流会立即跳转到最近的catch方法。

Promise.reject(new Error('这是一个错误'))
 .then(() => {
   
    // 这里不会被执行
    console.log('成功');
  })
 .catch((error) => {
   
    console.log('捕获到错误:', error.message);
  });

使用finally方法

finally方法无论Promise是成功还是失败都会执行,通常用于执行一些清理操作,但也可以在finally中处理错误状态,不过它不能阻止错误继续向上传播。

Promise.reject(new Error('这是一个错误'))
 .finally(() => {
   
    // 可以在这里进行一些资源释放等操作
    // 也可以根据需要重新抛出错误或进行其他处理
    try {
   
      // 尝试执行一些可能会出错的清理操作
    } catch (error) {
   
      console.log('finally中捕获到错误:', error.message);
    }
  });

在多个then中处理

每个then方法都可以接受两个参数,第一个是成功回调,第二个是失败回调。可以在失败回调中处理Promise.reject()抛出的错误。

Promise.reject(new Error('这是一个错误'))
 .then(
    () => {
   
      // 成功回调,不会执行
      console.log('成功');
    },
    (error) => {
   
      console.log('捕获到错误:', error.message);
    }
  );

多层Promise链处理

在多层Promise链中,错误会一直向上传播,直到被catch捕获。

const promise1 = Promise.reject(new Error('第一层错误'));

const promise2 = promise1.then(() => {
   
  // 这里不会被执行
  return '成功';
});

const promise3 = promise2.catch((error) => {
   
  console.log('第二层捕获到错误:', error.message);
  // 可以选择在这里继续返回一个Promise,或者处理完错误后返回一个值
  return '错误已处理';
});

promise3.then((result) => {
   
  console.log('最终结果:', result);
});

使用async/await结合try/catch

async/await语法可以让异步代码看起来更像同步代码,使用try/catch可以方便地捕获Promise.reject()抛出的错误。

async function test() {
   
  try {
   
    await Promise.reject(new Error('这是一个错误'));
  } catch (error) {
   
    console.log('捕获到错误:', error.message);
  }
}

test();
相关文章
|
前端开发
若依(ruoyi)前端Vue3 Element Plus Vite版样式修改
若依(ruoyi)前端Vue3 Element Plus Vite版样式修改
2728 0
|
存储 开发工具 git
Vscode 拉取代码时出现 在签出前 请先清理仓库工作树
Vscode 拉取代码时出现 在签出前 请先清理仓库工作树
2454 0
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
12729 1
|
9月前
|
前端开发 JavaScript 应用服务中间件
前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy
跨域问题是前端开发中常见且棘手的问题,但通过理解CORS的工作原理并应用合适的解决方案,如服务器设置CORS头、使用JSONP、代理服务器、Nginx配置和浏览器插件,可以有效地解决这些问题。选择合适的方法可以确保应用的安全性和稳定性,并提升用户体验。
6631 90
|
前端开发 JavaScript
如何让input框在用户输入后,文字居中显示
如何让input框在用户输入后,文字居中显示
775 0
|
11月前
|
前端开发 NoSQL Java
【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
本文介绍了如何配置和启动基于Java的若依(RuoYi)项目,涵盖后端和前端的详细步骤。首先,准备Redis、MySQL以及IDE(如Idea和VS)。接着,通过GitHub获取代码并导入到IDE中,执行必要的SQL文件和配置数据库密码。然后,启动Redis并进行相关配置。最后,按照前端配置步骤克隆前端代码库,打开终端执行命令完成前端配置。整个过程详细记录了每一步的操作,帮助开发者顺利部署若依项目。 如果你觉得有帮助,请点赞、关注和收藏,这将是我持续分享的动力!
6068 4
|
JSON 搜索推荐 C++
vscode如何更改背景颜色主题,黑色或白色?
【11月更文挑战第16天】在 VS Code 中更改背景颜色主题,可通过三种方式实现:1) 使用快捷键 Ctrl+K 和 Ctrl+T(Mac 上为 Command+K 和 Command+T)选择主题;2) 通过菜单中的“管理”->“颜色主题”选项选择;3) 修改 settings.json 文件中的 "workbench.colorTheme" 属性。此外,用户还可从扩展市场安装更多主题以满足个性化需求。
25495 6
|
移动开发 资源调度 JavaScript
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
这篇文章介绍了在Vue移动端网页中使用`pdfh5`和`vue-pdf`两个插件来实现PDF文件的预览,包括滚动查看、缩放、添加水印、分页加载、跳转指定页数等功能。
9447 1
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
|
iOS开发
IOS编译出现Command PhaseScriptExecution failed with a nonzero exit code
IOS编译出现Command PhaseScriptExecution failed with a nonzero exit code
2585 2