Bản dịch này đang trong quá trình.

Phương thức finally() trả về một Promise. Một khi promise được thực hiện (settle), dù kết quả là fulfilled hay rejected, thì hàm callback đã chỉ định sẽ được thực thi. Đây là cách để làm cho một đoạn code phải được thực thi sau khi Promise hoàn thành, dù kết quả là fulfilled hay rejected.

Cách này giúp bạn tránh phải viết những dòng code trùng lặp giữa hai phương thức xử lý then() và catch().

Syntax

p.finally(onFinally);

p.finally(function() {
   // settled (fulfilled or rejected)
});

Parameters

onFinally
Một Function được gọi khi Promise được thực hiện

Return value

Return a Promise whose finally handler is set to the specified function, onFinally.

Description

Phương thức finally() hữu ích khi bạn muốn xử lý công việc sau khi promise được thực hiện.

Phương thức finally() cũng tương tự như việc gọi .then(onFinally, onFinally) , tuy nhiên có một số sự khác biệt:

  • Khi tạo một hàm inline, bạn có thể gán nó một lần, thay vì phải định nghĩa tới hai lần, hoặc phải tạo thêm biến cho nó.
  • Một callback finally sẽ không nhận tham số nào, vì không có cách xác đáng nào để biết liệu promise đã fulfilled hay bị rejected. Bạn dùng tới hàm này trong trường hợp bạn không quan tâm đến kết quả khi fulfilled, hay lý do khi reject. Vậy nên, không dùng tới thì bạn không cần phải truyền vào.
  • Không như Promise.resolve(2).then(() => {}, () => {}) (sẽ được resolve với undefined), Promise.resolve(2).finally(() => {}) sẽ được resolve với 2.
  • Tương tự, không như Promise.reject(3).then(() => {}, () => {}) (sẽ được fulfill với undefined), Promise.reject(3).finally(() => {}) sẽ bị reject với 3.

Note: Một throw (hoặc trả về một promise bị reject) trong callback finally sẽ reject cái promise mới với lý do reject được chỉ định khi gọi throw().

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

Document Tags and Contributors

Những người đóng góp cho trang này: WTSKelly
Cập nhật lần cuối bởi: WTSKelly,