Promise 是前端中常用的一种异步编程的方式,它能够让我们更加高效地处理异步函数返回的结果。而 Promise 中的 finally()
方法则是 Promise 对象提供的一个特殊方法,用于指定当 Promise 对象执行完成后,无论它成功或失败都会被执行的回调函数。在本文中,我们将详解 finally()
方法的特点和使用场景,并提供一些实用的代码示例。
finally()
方法的特点
在了解 finally()
方法之前,我们先来回顾一下 Promise 的基本结构:
let promise = new Promise(function(resolve, reject) { // 一些异步操作代码 });
我们可以看到,Promise 构造函数需要传递一个函数作为参数,这个函数包含 resolve
和 reject
两个参数。当异步操作执行成功时,我们需要调用 resolve()
方法来处理结果,而当执行失败时,我们则需要调用 reject()
方法。接下来,我们就可以使用 then()
方法来处理成功时的结果,以及使用 catch()
方法来处理失败时的结果。
在这个基础上,finally()
方法被加入到了 Promise 对象中,它的基本语法为:
promise.finally(function() { // 无论成功或失败都会执行的回调函数 })
从这个语法中,我们可以看出 finally()
方法的几个特点:
finally()
方法接受一个回调函数作为参数,这个回调函数不接收任何参数。- 这个回调函数将在 Promise 对象执行完成后被执行,无论它是成功还是失败。
finally()
方法返回的是一个新的 Promise 对象,它的结果是执行成功或失败后原 Promise 对象的结果。
基于以上特点,我们可以看出 finally()
方法主要有两个作用:
- 在 Promise 对象执行完毕后,执行一些无论成功或失败都需要执行的操作。
- 在
finally()
方法中添加额外的then()
或catch()
方法来处理finally()
方法执行完成后的结果。
finally()
方法的使用场景
finally()
方法的应用场景也比较广泛,这里我们举几个例子加以说明:
场景一:清除加载中的页面元素
在前端开发中,我们经常要做一些异步加载的操作。当我们在加载一些比较大的数据或者一些静态资源时,这个加载过程可能会需要一定的时间。为了给用户更好的交互体验,我们一般会在页面上添加一些加载中的元素,如 loading 图标,进度条等等。当异步操作完成后,我们需要将这些加载元素清除掉。而 finally()
方法则可以方便我们实现这个功能,因为在清除元素的操作中,我们不需要考虑异步执行成功还是失败,都应该将加载元素清除掉。下面是一个示例代码:
-- -------------------- ---- ------- --- -------------- - ----------------------------------- ---------------------------- - -------- -- ------ ---------- -------------- -- - -- ------ -- ------------ -- - -- ------ -- ----------- -- - ---------------------------- - ------- -- ------ --
在这个代码中,我们通过 fetch
函数获取数据,当这个异步请求成功或失败后都会调用 finally()
方法的回调函数来隐藏加载元素。
场景二:释放系统资源
通常情况下,我们在执行一些系统级别的操作时,比如打开一个文件、连接数据库等操作,系统在执行完成后会返回给应用程序一些资源,如文件句柄、数据库连接等。而我们需要在使用完这些资源后,将它们释放掉。在 Promise 的异步操作中,我们可以使用 finally()
方法来确保这个资源一定会被释放。下面是一个示例代码:
-- -------------------- ---- ------- -------- ------------------ - ------ --- ----------------- ------- -- - ----- ---- - --- --------------- ------------- -- - -- ----- - ------------ - ---- - -------------- - --- -- - -------------------- ---------- -- - -- ------ ------------------------- ------ ----- -- ------------ -- - -- ----------- -- ----------- -- - ------------- -- ------ --
在这个示例代码中,我们打开一个文件,当文件打开成功后,我们使用 then()
方法来处理文件读取操作,而在使用完文件资源后,我们则在 finally()
方法中释放这个文件句柄。
总结
finally()
方法是 Promise 中提供的一个特殊方法,它可以在 Promise 对象执行完成之后,无论成功或失败,都执行一个回调函数。finally()
的主要作用是执行一些与异步执行状态无关的代码,如清除加载中的元素、释放操作资源等。finally()
方法返回的是一个新的 Promise 对象,它的结果是执行完成后原 Promise 对象的结果。在实际应用中,我们可以结合 then()
或 catch()
方法来处理最终的执行结果,实现更加精细的控制。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65a780e2add4f0e0ff0a22be