JS 原生异步操作

支持多层异步

    //ES6写法
    Promise.prototype.finally = function (callback) {
      let P = this.constructor;
      return this.then(
        value => P.resolve(callback()).then(() => value),
        reason => P.resolve(callback()).then(() => { throw reason })
      );
    };
    //常规写法
    Promise.prototype.finally = function (callback) {
        var P = this.constructor;
        return this.then(
            function(value){
                P.resolve(callback()).then(function(){
                    return value
                })
            },
            function(reason){
                P.resolve(callback()).then(function(){
                    throw reason
                })
            }
        );
    };
    //使用
    return new Promise(function (resolve, reject) {
        $http.get('./json/xiansuotibao.json').then(function(t){
            console.log('t',t)
            resolve({ errno: 0, data: 'ok' })
        }).catch(function(c){
            console.log('c',c)
            reject({ errno: 1, data: 'err' })
        });
    }).then(function(res){
        console.log('p->',res);
        //返回结果后,可以多层嵌套 return new Promise().then()
    });