当前位置: 首页 > news >正文

Promise多个then、catch、finally的执行结果分析与总结

运行如下测试代码:

function testPromise () {return new Promise((resolve, reject) => {setTimeout(() => {resolve('成功!')}, 1000)setTimeout(() => {reject('失败!')}, 3000)}).then((res) => {console.log('First then:', res)return 'From first then'}).catch(err => {console.log('First catch:', err)return 'From first catch'}).finally((res) => {console.log('First finally', res)return 'From first finally'}).then((res) => {console.log('Second then:', res)return 'From second then'}).catch(err => {console.log('Second catch:', err)return 'From second catch'}).finally((res) => {console.log('Second finally', res)return 'From second  finally'}).then((res) => {console.log('Third then:', res)return 'From third then'}).catch(err => {console.log('Third catch:', err)return 'From third catch'}).finally((res) => {console.log('Third finally', res)return 'From third  finally'})
}

结果分析:

  1. 一个promise中,resolve和reject只会执行最先触发的一个;

  2. 注释掉第6~8行代码,执行resolve的输出内容如下:
    20201127142914354
    第一个then的参数是resolve的参数值,然后执行第一个finally;
    第二个then的回调参数是第一个then的返回值,然后执行第二个finally,以此类推;
    finally无参数;

  3. 注释掉第3~5行代码,执行reject的输出内容如下:
    20201127143859436
    reject抛出的错误会在第一个catch中捕获,参数是reject的参数值,接着执行第一个finally;继续会执行第二个then,参数是第一个catch的返回值,然后执行第二个finally;
    以此类推;

  4. 在第二个then或第二个catch中抛出一个异常,输出内容如下
    20201127152623794
    在then中产生的错误不会在后面的catch中被捕获,而是继续执行后面的then和finally。

总结:

  1. 正常返回值时(resolve),连续多个then和finally均会被执行;
  2. reject抛出的错误只会被捕获一次,然后继续按顺序执行后面的then和finally,即使在then和finally中有错误抛出;
  3. then、catch的参数值是执行的上一个then或catch的返回值。
http://www.gsyq.cn/news/26214.html

相关文章:

  • vSAN物理磁盘故障处理
  • 2025年10月医用面膜产品推荐:权威对比评测榜助术后修护精准决策
  • 2025年10月电动叉车销售公司推荐:五强对比评测榜
  • 类方法和实例方法区别 flutter
  • 今天给电脑安装了新华财经
  • [Linux]学习笔记系列 -- lib/xarray.c eXtensible Array (XArray) 可扩展数组 - 教程
  • 2025 年桥梁护栏厂家最新推荐排行榜:聚焦安全防护与耐用性能的实力企业甄选指南
  • 2025年10月美白精华产品排行:从成分到肤感全维度评测
  • Koodo Reader快捷键大全:提升阅读效率的键盘执行技巧
  • 2025年10月美白精华产品推荐榜:十款热门单品深度对比
  • 基于 RoBERTa + 多策略优化的中文商品名细粒度分类 - 实践
  • 2025年10月不锈钢水箱厂家评价榜:实力参数横向对比
  • 2025年10月长白山度假酒店推荐:民俗与国际范双榜对比
  • 2025年10月不锈钢水箱厂家榜单:十家参数对比与选购要点
  • 深入解析:开源项目net-radio-archive常见问题解决方案
  • 2025 年干燥机厂家最新推荐排行榜:聚焦实验室 / 工业用优质设备,精选实力企业权威呈现
  • 2025年10月注册公司服务评测榜:五家机构对比与排名全解析
  • 2025年10月代理记账公司推荐:五强对比评测榜助创业者精准选合规伙伴
  • redis-分级管理及容灾冷处理
  • Redis常用命令指南
  • 2025 年塑胶跑道厂家最新推荐排行榜:聚焦优质企业核心优势,助力采购决策
  • 2025年10月益生菌厂家评价榜:五强排名与场景化选购建议
  • 吴恩达深度学习课程一:神经网络和深度学习 第三周:浅层神经网络 课后作业和代码实践
  • Gitee DevOps平台:解码中国企业数字化转型的加速引擎
  • 详细介绍:基于Python+hive+hadoop+Spark的新能源汽车销售数据分析系统大数据可视化分析毕业设计项目源码
  • ASP.NET CORE MVC用时分析工具MiniProfiler
  • Spring 基础核心 - SpringMVC 入门与请求流程 - 实践
  • 2025年10月中国遗产继承律师推荐榜:盈科陈珊珊领衔实力对比
  • 2025年中国国际健康营养博览会(NHNE):深度盘点全球营养产业新坐标
  • unity 读取PPT显现到屏幕功能