翻譯不完整。請協助 翻譯此英文文件

finally() 為一個 Promise的返回。當 promise 完成時,無論結果是履行(fulfilled )還是拒絕(rejected),都會執行指定的回調函數。這為代碼提供了一種方法,當 Promise 不管是否成功完成還是被拒絕,一旦處理完畢,必須執行該代碼。
 
這樣可以避免你在 promise's then()catch() 程序中有重覆的代碼。

Syntax

p.finally(onFinally);

p.finally(function() {
   // 己結算 (己履行[fulfilled]或己拒絕[rejected])
});

Parameters

onFinally
Promise 完畢時呼叫的Function

Return value

返回Promisefinally 所處理設置的指定函數 onFinally

Description

如果您希望在 promise 完成後進行一些處理或清理,無論結果如何, finally() 都非常好用。

finally() 與 .then(onFinally, onFinally) 方法與調用非常相似,但還是存在一些差異:

  • 創建內聯函數時,可以傳遞一次,而不是強制要求它兩次,或者為它創建一個變量。
  •  finally 不會收到任何的結果,因為有其他確認結果更好的方法。這個函數適用於您不關心執行結果的情況,因些無需提供。
  • Promise.resolve(2).then(() => {}, () => {})(將與之解決undefined)不同,Promise.resolve(2).finally(() => {})將解決2
  • 同樣,與Promise.reject(3).then(() => {}, () => {})(將履行undefined)不同,Promise.reject(3).finally(() => {})將被拒絕3

Note: finally 在回調函數(callback)呼叫 throw() 或退回被拒絕的promise,指定拒絕原因時,會拒絕新的 promise。

Examples

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; });

Specifications

Specification Status Comment
TC39 proposal Stage 4  

Browser compatibility

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support63 No58 No5011.1
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support6363 No585011.1 No

See also

文件標籤與貢獻者

此頁面的貢獻者: l13013312333
最近更新: l13013312333,