Promise.finally 的使用及注意事项

Promise.finally 是 Promise 新增的方法之一,它会在 Promise 执行结束后无论结果是成功还是失败都会执行。本文将介绍 Promise.finally 的使用及注意事项。

Promise.finally 的使用

Promise.finally() 接收一个回调函数作为参数,这个回调函数会在 Promise 执行结束后调用。无论 Promise 的状态是 resolved 还是 rejected,这个回调函数都会被调用,同时它也不会改变 Promise 的状态值。

下面是 Promise.finally() 的基本用法:

Promise.finally 的注意事项

虽然 Promise.finally() 是一种非常方便的方法,但是我们仍需要注意一些细节。

1. Promise.finally() 不会改变 Promise 的状态

Promise.finally() 不会改变 Promise 的状态,它只是在 Promise 执行结束后执行一些操作。比如下面这个例子:

输出的结果为:

这说明在 Promise 执行成功后,Promise.finally() 依然会执行。

2. Promise.finally() 的返回值和 Promise 没有关系

Promise.finally() 的返回值和 Promise 本身没有关系,它只是返回一个新的 Promise 对象。Promise.finally() 返回的 Promise 对象会使用它自己的状态值和原来的 Promise 对象的状态值相同,同时它自己的值是 undefined。

3. Promise.finally() 的回调函数必须是同步的

Promise.finally() 的回调函数必须是同步的,否则它可能不会按照你预期的顺序执行。比如下面这个例子:

输出的结果为:

可以看到,setTimeout() 是在 then() 之后执行的,但是回调函数中的 return 是不会影响 Promise 状态的,所以 then() 还是会输出 1。

示例代码

以下是一个示例代码,其中使用了 Promise.finally()。

这个示例代码中,如果 fetch 请求失败将会输出错误信息,如果 fetch 请求成功将会输出获取数据结束的信息。在无论成功还是失败的情况下,Promise.finally() 都会被正确地调用。

总结

Promise.finally() 是一个十分有用的方法,它可以让我们更好地控制 Promise 在执行结束后的一些操作,同时它也是需要我们注意一些细节的,例如回调函数必须是同步的,它的返回值和 Promise 本身没有关系等等。正确地使用 Promise.finally() 可以让我们代码更加健壮和易于维护。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65413d777d4982a6ebae144e


纠错
反馈