什么是 Promise.prototype.finally
Promise.prototype.finally 是 ECMAScript 2018 新增的 Promise 原型对象的方法。它会在一个 Promise 返回其 settle 状态(fulfilled 或 rejected)时被执行。相当于不管 Promise 被 resolve 还是被 reject,finally 中的代码总是会被执行。
新特性的意义和用途
在实践中,我们通常需要在 Promise 的 resolve 或 reject 之后执行一个或多个操作,例如释放资源或将结果写入日志。在之前的版本中,我们往往需要在 Promise 中的 then() 或 catch() 方法中重复编写相同的操作,而这种做法会导致代码重复和可读性的下降。
finally 的引入可以大大简化 Promise 的处理流程,使得代码更加简洁清晰,并且可以保证我们在 Promise 结束后都能执行特定的操作,无需重复代码。
finally 方法的使用
finally 方法在 Promise 原型对象上定义,可以通过 Promise 实例的 prototype 调用。如下所示:
Promise.prototype.then(onFulfilled); Promise.prototype.finally(onFinally);
其中,onFinally 是一个在 Promise 结束后被执行的回调函数。无论 Promise 是否成功,finally 都会在 Promise 返回 settled 状态之后被调用。
下面是一个简单的示例,展示如何使用 Promise.prototype.finally 方法:
async function recordStats() { const promise = doSomeProcess(); // 假设我们将 Promise 的状态记录在一个全局变量中 promise.then(() => globalStats.success = true) .catch(() => globalStats.error = true) .finally(() => console.log('Process finished!')); await promise; }
在上述示例中,我们在 Promise 的 then 和 catch 方法中记录了 Promise 的状态,然后在 finally 方法中打印一条信息。这样我们就可以对 Promise 状态进行记录同时保证代码清晰。
总结
Promise.prototype.finally 是 ECMAScript 2018 中一个很有用的特性,可以在 Promise 结束后执行特定的操作,避免了代码重复,同时代码结构也更加清晰。建议在开发过程中多多使用这个特性,以提高代码编写的效率和可读性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647acabb968c7c53b066fb59