$q服务

q服务是AngularJS中自己封装实现的一种Promise实现。

常用的几个方法:

  • defer() 创建一个deferred对象,这个对象可以执行几个常用的方法,比如resolve,reject,notify等,以及promise属性。
    • resolve(value) ——传入 value 解决派生的 promise。 如果 value 是一个通过 $q.reject 构造的拒绝对象(rejection) , 该promise 将被拒绝。
    • reject(reason) ——拒绝派生的promise,并提供原因 。 这相当于通过 $q.reject构造的拒绝对象(rejection)作为参数传递给 resolve。
    • notify(value)  ——在 promise 执行的过程中提供状态更新。 这在 promise 被解决或拒绝之前可能会被多次调用。
      属性promise —— 与延迟(deferred)相关联的 promise 对象。

    var defer1 = $q.defer();
    var promise1 = defer1.promise;
    promise1.then()
              .catch()
                  .finally(); 
    then...catch...finally可以想想成java里面的try...catch...finally。
  • all() 传入Promise的数组,批量执行,返回一个promise对象

    这个all()方法,可以把多个primise的数组合并成一个。当所有的promise执行成功后,会执行后面的回调。回调中的参数,是每个promise执行的结果。
    当批量的执行某些方法时,就可以使用这个方法。

                var funcA = function(){
                    console.log("funcA");
                    return "hello,funA";
                }
                var funcB = function(){
                    console.log("funcB");
                    return "hello,funB";
                }
                $q.all([funcA(),funcB()])
                .then(function(result){
                    console.log(result);
                });

    执行的结果:

    funcA
    funcB
    Array [ "hello,funA", "hello,funB" ]
  • when() 传入一个不确定的参数,如果符合Promise标准,就返回一个promise对象。
  • 在Promise中,定义了三种状态:等待状态,完成状态,拒绝状态。 状态的变更是不可逆的,且等待状态可以变成完成或者拒绝。
原文地址:https://www.cnblogs.com/yerikm/p/6667497.html