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 被解决或拒绝之前可能会被多次调用。
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中,定义了三种状态:等待状态,完成状态,拒绝状态。 状态的变更是不可逆的,且等待状态可以变成完成或者拒绝。