finally()
方法返回一个Promise。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise是否成功完成后都需要执行的代码提供了一种方式,避免了同样的语句需要在then()和catch()中各写一次的情况。
语法
p.finally(onFinally);
p.finally(function() {
// settled (fulfilled or rejected)
});
参数:Promise 结束后调用的Function。
返回值:返回最后处理程序设置为指定函数onFinally的promise。
如果你想在 promise 执行完毕后无论其结果是失败还是成功都做一些处理或清理时,finally() 方法可能是有用的。
finally() 虽然与 .then(onFinally, onFinally) 类似,但它们不同的是:
- 调用内联函数时,不需要多次声明该函数或为该函数创建一个变量保存它。
- 由于无法知道promise的最终状态,所以finally的回调函数中不接收任何参数,它仅用于无论最终结果如何都要执行的情况。
- 与
Promise.resolve(2).then(() => {}, () => {})
(resolved的结果为undefined
)不同,Promise.resolve(2).finally(() => {}) resolved
的结果为 2。 - 同样,
Promise.reject(3).then(() => {}, () => {})
(resolved 的结果为undefined
),Promise.reject(3).finally(() => {}) rejected
的结果为 3。
举例:
let isLoading = true;
fetch(myRequest).then(function(response) {
var contentType = response.headers.get("content-type");
if(contentType && contentType.includes("application/json")) {
return response.json();
}
throw new TypeError("Oops, we haven't got JSON!");
})
.then(function(json) { /* process your JSON further */ })
.catch(function(error) { console.log(error); })
.finally(function() { isLoading = false; });