• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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; });