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

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Basic supportChrome Full support 63Edge No support NoFirefox Full support 58IE No support NoOpera Full support 50Safari Full support 11.1WebView Android Full support 63Chrome Android Full support 63Edge Mobile No support NoFirefox Android Full support 58Opera Android Full support 50Safari iOS Full support 11.1Samsung Internet Android No support Nonodejs Full support 10.0.0

Legend

Full support  
Full support
No support  
No support

See also

文件標籤與貢獻者

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