Promise 的 finally 怎么实现的?

Promise的finally()方法是在Promise是否成功或失败后都要执行的回调。这对于需要在Promise完成后执行一些清理或者后续操作的场景非常有用。

finally()方法接受一个函数作为参数,这个函数不接收任何参数,也就是说,你不能在finally()的回调函数中直接获取到Promise的结果。finally()返回的是一个Promise,这个Promise在原始Promise解析完成后才会解析,并且它解析为原始Promise的值。

下面是一个例子:

let p = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Resolved!'), 1000);
});

p.then(result => console.log(result)) // 输出 "Resolved!"
 .catch(error => console.log(error))
 .finally(() => console.log('Promise completed!')); // 输出 "Promise completed!"

在这个例子中,我们创建了一个Promise p,这个Promise在1秒后解析为”Resolved!”。然后我们在Promise解析完成后打印出结果,并在finally()中打印出”Promise completed!”。无论Promise是成功还是失败,最后都会执行finally()中的函数。

在规范中,Promise的finally()方法是这样实现的:它创建了一个函数,这个函数接收一个值,然后返回一个Promise.resolve(value)。这样可以确保在finally()之后可以继续链式调用,并且传递的值不会被改变。

发表评论

后才能评论