Promise通过then、catch、finally实现链式调用:then处理成功并传递结果,catch捕获任意阶段错误,finally执行清理任务且不影响结果传递。

在 JavaScript 中,Promise 是处理异步操作的核心机制之一。通过 then、catch 和 finally 方法,我们可以以更清晰、可控的方式管理异步流程。这三种方法都支持链式调用,合理使用它们能有效提升代码的可读性和健壮性。
then:处理成功结果与链式传递
then 方法用于指定 Promise 成功状态下的回调函数。它接收两个参数:第一个是成功时执行的回调,第二个是可选的失败回调(通常推荐用 catch 处理错误)。then 的关键优势在于它返回一个新的 Promise,支持链式调用。
这意味着可以在多个异步操作之间传递数据:
每次调用 then 返回新的 Promise,可以继续接下一个 then 在 then 的回调中返回普通值,会被包装成已解决的 Promise,供后续 then 使用 如果返回的是另一个 Promise,则后续 then 会等待其完成后再执行
示例:
立即学习“Java免费学习笔记(深入)”;
fetch('/api/user') .then(response => response.json()) .then(user => console.log(user.name)) .then(() => console.log('用户数据处理完成'));
catch:统一捕获异常
catch 方法专门用于捕获 Promise 链中任意环节出现的错误或被 reject 的情况。它等价于调用 then(null, rejectionCallback),但语义更清晰。
在链式结构中,只要前面任何一个 Promise 被 reject 或抛出异常,就会跳过后续的 then,直接进入最近的 catch。
建议将 catch 放在整个链的末尾,用于统一错误处理 catch 之后仍可继续链式调用 then,因为 catch 本身也返回 Promise 若 catch 中再次抛错,则需要后续的 catch 捕获
示例:
立即学习“Java免费学习笔记(深入)”;
fetch('/api/data') .then(res => res.json()) .then(data => { if (!data.ok) throw new Error('数据异常'); }) .catch(err => { console.error('请求失败:', err); });
finally:无论成败都要执行的操作
finally 方法用于指定一个回调,在 Promise 最终 settled(无论是 fulfilled 还是 rejected)后执行。它不接收任何参数,适合放置清理逻辑,比如关闭加载动画、释放资源等。
finally 不影响链的值传递,前一个状态和值会原样传给下一个环节 不能改变 Promise 的结果,即使在 finally 中返回值或抛错,也不会修改原始结果(抛错会中断链) 常用于 UI 状态重置或资源清理
示例:
立即学习“Java免费学习笔记(深入)”;
let loading = true;fetch('/api/list') .then(res => res.json()) .catch(err => console.error(err)) .finally(() => { loading = false; console.log('请求结束,清理状态'); });
基本上就这些。合理组合 then、catch 和 finally,能让异步代码更清晰、更可靠。链式调用的关键在于理解每个方法如何返回新的 Promise,以及错误是如何向后传播的。掌握这一点,就能写出结构良好的异步逻辑。
以上就是JavaScript Promise:then、catch 与 finally 方法链式调用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1534276.html
微信扫一扫
支付宝扫一扫