技术文摘
promise 中 then 与 finally 的区别
在 JavaScript 的异步编程中,Promise 是一种强大的工具,其中 then 和 finally 方法是经常被使用的两个重要特性,但它们有着明显的区别。
then 方法用于指定当 Promise 状态成功(resolved)或失败(rejected)时要执行的回调函数。它接受两个参数,第一个参数是 Promise 成功时执行的回调函数,第二个参数是 Promise 失败时执行的回调函数。通过 then 方法,我们可以按照异步操作的结果进行相应的处理,并返回一个新的 Promise,从而实现链式调用,使异步代码的逻辑更加清晰和易于理解。
例如,如果我们有一个获取用户数据的异步操作,成功时我们可以对数据进行处理,失败时给出相应的错误提示。
finally 方法则不同,它无论 Promise 的最终状态是成功还是失败,都会被执行。它主要用于执行一些无论结果如何都需要进行的清理操作或最终的统一处理逻辑。比如,关闭一个加载指示器、释放一些资源等。
与 then 方法不同的是,finally 方法不接受任何参数,也不会改变原 Promise 的结果值。它的返回值是一个新的 Promise,这个新的 Promise 的结果值和原 Promise 的结果值是相同的。
下面通过一个示例来更直观地理解它们的区别。假设我们有一个异步函数 fetchData 来获取数据:
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (Math.random() > 0.5) {
resolve('成功获取数据');
} else {
reject('获取数据失败');
}
}, 1000);
});
}
fetchData()
.then(data => {
console.log('成功:', data);
})
.catch(error => {
console.error('失败:', error);
})
.finally(() => {
console.log('无论成功失败,都会执行');
});
在上述示例中,then 处理了成功和失败的不同情况,而 finally 则在操作结束后始终执行。
then 侧重于根据 Promise 的结果进行不同的处理,而 finally 则用于确保某些必要的收尾工作得以执行,无论 Promise 的最终状态如何。理解并正确使用这两个方法,可以让我们更好地编写异步代码,提高代码的可读性和可维护性。
- 高并发写入场景中优化数据库写入性能与事务处理效率的方法
- IntelliJ IDEA 与 GitHub Copilot 集成 开发效率大幅提升
- PyTimeTK:简单高效的时间序列分析库
- 后管权限系统设计终于被讲清楚
- 并发编程 Bug 的源头:可见性、原子性与有序性问题
- 2024 年最值得尝试的五个 PyCharm 插件
- 原生 cookieStore 方法:简化 Cookie 操作
- React 跨平台开发未来可期!
- 33 张图揭示 OpenFeign 核心架构原理
- Golang 中日志记录的简化:增强性能与调试效率
- 为何不建议用 Executors 创建 Java 线程池
- 利用 ConfuserEx 代码混淆工具保障.NET 应用程序安全
- 五个 Rust 项目助您成为卓越开发者
- 函数式编程之艺:探秘 Python 修饰器领域
- git、Gitee、GitHub 与 GitLab 的深度解析