阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

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

      规范

      SpecificationStatusComment
      ECMAScript Latest Draft (ECMA-262)Promise.prototype.finallyDraft

      参见

      目录
      目录