Promise.prototype.finally() - JavaScript Promise 对象
Promise.prototype.finally()
finally()
方法返回一个Promise
。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise
是否成功完成后都需要执行的代码提供了一种方式。这避免了同样的语句需要在then()
和catch()
中各写一次的情况。语法
p.finally(onFinally); p.finally(function() { // 返回状态为(resolved 或 rejected) });
参数
onFinally
Promise
结束后调用的Function
。返回值
返回一个设置了finally
回调函数的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
。
注意:在finally
回调中throw
(或返回被拒绝的promise)将以throw()
指定的原因拒绝新的promise.
示例
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; });
内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)