JavaScript Promise.finally()

2025年4月23日 | 阅读 3 分钟

在 JavaScript 中,Promise 对象的 finally() 方法在 promise 状态确定后返回一个回调函数。

JavaScript 中的 Promise.finally() 方法无论 promise 结果如何都会执行一个回调,通常用于清理任务。

简单来说,Promise 实例的 finally() 方法安排一个函数在 promise 状态确定(无论是已解决还是已拒绝)时被调用。它会立即返回另一个 Promise 对象,允许您链式调用其他 promise 方法。

语法

参数

  • 确定状态:这是一个函数,在 promise 状态确定(已解决或已拒绝)时执行。
  • 返回值:它返回一个 Promise,其 finally 处理程序已设置为指定的函数。

示例

编译并运行

输出

 
Done!
This runs no matter what.   

Finally 在 JavaScript 中是如何工作的?

一个 try-catch 语句总是与一个 finally 块配对。您可以只使用 try 语句,或者将 try 语句与 catch 和 finally 块结合使用。一旦这些块执行完毕,预期运行的代码可能会导致错误。

此错误可能是由于编程错误或运行时问题造成的。如果 try 块中的代码失败,catch 块将执行。

如果发生故障,catch 块会促使执行所需的操作。当 try 或 catch 块运行后,finally 块将始终执行。当使用 try 语句时,必须包含至少一个 catch 或 finally 语句,尽管两者并非都必需。

Promise.finally() 的示例

示例 1

编译并运行

输出

 
Success: Data loaded
Operation complete   

说明

在此代码中,它创建一个新的 Promise,该 Promise 在 1 秒延迟后以消息“Data loaded”解决。

then() 方法用于处理已解决的数据,该数据将与成功消息一起记录到控制台。

catch() 方法用于处理可能发生的任何错误,该错误将与错误消息一起记录到控制台。

finally() 方法用于执行一个回调函数,无论 promise 是已解决还是已拒绝。

示例 2

编译并运行

输出

 
Done after delay
Clearing temporary data…

说明

在此代码中,finally() 方法用于在 promise 状态确定后执行清理任务。

示例 3

编译并运行

输出

 
Data received!
Cleanup: hiding loading spinner...

说明

在此代码中,loadData 函数返回一个 Promise,该 Promise 在 2 秒后解决(模拟加载过程)。

then 方法用于处理已解决的数据,该数据将记录到控制台。

finally 方法用于执行清理操作(隐藏加载微调器),无论结果如何。