Promise.prototype.finally()
是 ES2018 引入的一个新方法,它可以让我们在 Promise 完成或拒绝后执行一些代码,这段代码不管 Promise 是否成功都会被执行。在这篇文章中,我们将会深入学习如何在前端开发中应用 Promise.prototype.finally()
,以及它对于项目的指导意义。
Promise.prototype.finally() 的基本用法
Promise.prototype.finally()
接受一个回调函数作为参数,并且这个回调函数不接受任何参数。它会在 Promise 执行结束后被调用,无论 Promise 是否被解决。 Promise.prototype.finally()
返回一个新的 Promise,它将会继承我们传进去的 Promise 的状态(fulfilled 或者 rejected)。
下面是一个基本应用的例子:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - ----------------- -- ------ --- ------- ------------ -- - -------------------- -- ------------ -- - --------------------- -- ----------- -- - -------------------- --------- ---展开代码
输出结果为:
hello Promise ended.
我们可以看到, Promise.prototype.finally()
的回调函数会被执行,无论 Promise 成功还是失败。
实际应用场景
处理异步请求
异步请求是我们日常前端开发中经常遇到的问题。因为它们是异步的,所以我们必须在处理它们时非常小心,以确保我们的代码不会崩溃或出现无法处理的错误。使用 Promise.prototype.finally()
可以简化异步请求的处理过程,因为它可以让我们在请求完成后执行一些其他的代码。
下面是一个简单的例子,使用了 fetch()
函数向服务器发送一个 GET 请求:
-- -------------------- ---- ------- --------------------------------- -------------- -- - ------ ---------------- -- ---------- -- - -- ---------- -- ------------ -- - -- ---- -- ----------- -- - -- -- ------- -- ---展开代码
在这个例子中,我们可以看到 Promise.prototype.finally()
被用于在请求完成后隐藏 loading 动画。这是非常有用的,因为在服务器响应数据时,我们通常需要隐藏这些动画。
处理非异步操作
在现代 JavaScript 应用程序中,我们通常使用异步操作处理大量数据。但是,在某些情况下,我们不需要异步操作,我们可以使用 Promise.prototype.finally()
来处理它们。
例如,我们想要对一个数组进行排序,但是我们不需要等待异步请求完成后才进行操作,这时我们可以使用 Promise.prototype.finally()
来执行排序操作:
const array = [3, 1, 5, 2, 4]; Promise.resolve().finally(() => { array.sort(); }); console.log(array); // [1, 2, 3, 4, 5]
处理资源清理
在某些情况下,我们可能需要确保当 Promise 执行完毕后,我们的资源已被正确释放。 Promise.prototype.finally()
可以在 Promise 执行结束后清理这些资源。
例如,我们可以使用它来关闭数据库连接:
-- -------------------- ---- ------- ----- -- - -------------------------- ------ --- ---------- ---- - ------ ----- ------- - --- ----------------- ------- -- - -- ------- --- ------- ------------ -- - -- ---- -- ------------ -- - -- ---- -- ----------- -- - ----------- ---展开代码
在这个例子中,当 Promise 执行结束后,数据库连接会被关闭,确保我们的应用程序不会在不必要的情况下浪费资源。
指导意义
使用 Promise.prototype.finally()
可以使我们的代码更简洁、更易于阅读,而且可以减少代码中的重复。 如果您的团队正在使用 Promise,我们建议您尝试使用 Promise.prototype.finally()
以优化您的代码中的 Promise 处理。
此外,使用 Promise.prototype.finally()
也可以帮助您更好地管理您的资源。 它可以确保您所有的资源都在 Promise 执行结束后被正确释放,这可以防止您的代码出现内存泄漏。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67be5767a231b2b7ed188e4f