推荐答案
Promise.prototype.finally
是 ECMAScript 2018 引入的一个方法,它允许你在 Promise 无论成功还是失败后都执行一段代码。这个方法返回一个新的 Promise,并且不会改变原 Promise 的状态。
-- -------------------- ---- ------- ------- ------------ -- - -- ------- -- ------------ -- - -- ------- -- ----------- -- - -- -------------- ---
本题详细解读
1. finally
方法的作用
finally
方法的主要作用是在 Promise 链的末尾添加一个回调函数,无论 Promise 是成功(fulfilled
)还是失败(rejected
),这个回调函数都会被执行。这使得你可以在 Promise 链的最后执行一些清理操作,比如关闭加载动画、释放资源等。
2. finally
方法的返回值
finally
方法返回一个新的 Promise,这个 Promise 的状态与原 Promise 的状态相同。也就是说,如果原 Promise 成功,finally
返回的 Promise 也会成功;如果原 Promise 失败,finally
返回的 Promise 也会失败。
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------------- --- ------- ----------- -- - -------------------- ----------- -- ------------ -- - -------------------- -- --- ------- ---
3. finally
方法的参数
finally
方法接受一个回调函数作为参数,这个回调函数不接受任何参数。这意味着你不能在 finally
中访问 Promise 的结果或错误信息。
promise .finally(() => { console.log('This will run no matter what'); });
4. finally
方法的典型使用场景
finally
方法通常用于执行一些无论 Promise 成功还是失败都需要执行的操作。例如:
- 关闭加载动画
- 释放资源
- 清理临时数据
fetch('https://api.example.com/data') .then(response => response.json()) .catch(error => { console.error('Error:', error); }) .finally(() => { console.log('Request completed'); });
在这个例子中,无论请求成功还是失败,finally
中的代码都会执行,确保请求完成后进行必要的清理操作。