ES9 新增全局对象:Promise.prototype.finally() 函数详解
在 ES9 中,新增了一个全局对象,即 Promise.prototype.finally() 函数。它是 Promise 原型对象上的方法之一,用于在 Promise 对象被解析或拒绝后执行指定的操作并返回原来的值。
在传统的 Promise.then() 方法中,我们可以处理成功和失败的情况。但是,我们还需要执行一些无论成功和失败都需要执行的操作,比如清除定时器、关闭数据库连接等。
Promise.prototype.finally() 方法就是为了解决这个问题的。我们可以将这些无论成功或失败都需要执行的代码写在 finally 方法里。这样,我们就不需要在 then 方法中重复写代码。
下面是 Promise.prototype.finally() 方法的详细使用说明。
- 语法
Promise.prototype.finally(onFinally);
这个函数接收一个回调函数 onFinally,当 Promise 解析或拒绝时都会调用这个回调函数,并返回最初的 Promise 对象。
- 参数
onFinally (required):A function that is called when the Promise is settled.
- 返回值
返回 Promise 对象,与初始 Promise 对象相同。
- Promise.prototype.finally() 的示例代码
下面是 Promise.prototype.finally() 的示例代码,我们将一个 Promise 对象通过 Promise.resolve() 方法解析,并在 then 方法中输出 Promise 的解析值。在 finally 方法中,我们输出一段文字 "Promises demo",并将这个 Promise 对象返回。
Promise.resolve("Hello ES9!") .then(result => console.log(result)) .finally(() => console.log("Promises demo")); // 输出: // Hello ES9! // Promises demo
从上面的示例代码我们可以看出,在 finally 方法中我们可以添加各种操作,比如清除定时器、关闭数据库连接等。无论 Promise 是成功、失败还是被取消,finally 方法中的操作都会被执行。
- 常见的错误
在使用 Promise.prototype.finally() 方法时,常见的错误包括:
- 忘记在 finally 方法中返回 Promise 对象。
- 忘记将 finally 方法放在 Promise 的最后。
- 在 finally 方法中使用了错误的 this 关键字。
- 结论
就像文章开头所说的,Promise.prototype.finally() 方法就是为了解决一些无论成功还是失败都需要执行的操作而设计的。使用它可以让我们的代码更加清晰和简洁,避免重复的代码。
但是,在使用时也需要注意一些常见的错误。希望本文可以让大家对 Promise.prototype.finally() 方法有一个更加深入和详细的了解。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66ef87216fbf9601972fc41a