网上介绍$q的文章有很多的,但是大多都差不多,其实$q用法很简单,我这里介绍2种我使用过的方法。
1、简单的使用方式 (等待某个接口完成请求后,在操作…)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | function getList() {
 var deferred = $q.defer();
 
 CoinCoin.favoriteQueryList({}, function (res) {
 if (res.httpCode == 200) {
 
 deferred.resolve(res.data);
 } else {
 
 deferred.reject();
 }
 }
 
 return deferred.promise;
 }
 
 | 
如何调用?
| 12
 3
 4
 5
 
 | getList().then(function(res){
 
 console.log(res);
 })
 
 | 
2、循环调用 (等待某一组接口完调用完成,再操作…) (更新于:2019/5/6)
在项目中我遇到过很多,这种需求。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | function fundOrderById(res) {
 var result = [];
 
 angular.forEach(res.data.list, function (item, index) {
 result.push(function () {
 var deferred = $q.defer();
 
 FundService.fundOrderById({ id: item.orderId }, function (res) {
 if (res.httpCode == 200) {
 
 deferred.resolve(res.data);
 } else {
 
 deferred.reject();
 }
 })
 return deferred.promise;
 }())
 })
 return result;
 }
 
 | 
如何调用? $q.all().then()...方式调用
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | $q.all(fundOrderById(res)).then(function (resp) {
 angular.forEach(res.data.list, function (item, index) {
 item.detailInfo = function () {
 for (let i in resp) {
 if (item.orderId == resp[i].id) {
 return resp[i];
 }
 }
 }();
 })
 })
 
 | 
完成!