$q.all() 的异步处理问题
一
html:
<div ng-app> <div ng-controller="PromiseCtrl"> {{result}} </div> </div>
js:
function PromiseCtrl($scope, $q, $timeout) { // Our promise function with its delay as argument var getPromise = function(delay) { // Creates a Deferred object var deferred = $q.defer(); $timeout(function() { // Resolve the promise at the end of the delay if said delay was > 0 if(delay > 0) { deferred.resolve("Success"); } else { deferred.reject("Fail"); } }, delay); // The promise of the deferred task return deferred.promise; }; // Init $scope.result = "Waiting"; /* * Combines multiple promises into a single promise * that will be resolved when all of the input promises are resolved */ $q.all([ getPromise(1000), getPromise(2000), getPromise(3000) // <--- Try something less than 0 ]).then(function(value) { // Success callback where value is an array containing the success values $scope.result = value; }, function(reason) { // Error callback where reason is the value of the first rejected promise $scope.result = reason; }); }
输出:["Success","Success","Success"]
二
$scope.falseList = []; angular.forEach($scope.uploadDataList, function(value,index){ $scope.uploadData = value; $scope.uploadData.name = $scope.IPSUser.name; $scope.uploadData.part = inds; var requests = []; requests.push($http.post($scope.URL+"zhuanlistatus/addZhuanliStatus",$scope.uploadData)); $q.all(requests).then(function(value) { console.log("value",value); // Success callback where value is an array containing the success values if(value[0].data.result){ if(index == $scope.uploadDataList.length-1) { layer.alert("通知书添加成功",{time:2000}); ngDialog.closeAll(); } }else{ $scope.falseList.push(value[0].config.data); ngDialog.closeAll(); if(index == $scope.uploadDataList.length-1) { ngDialog.open({ template: 'html/maintain/falseListPage.html', className: 'ngdialog-theme-plain', width: '40%', scope: $scope, cache: false }); } } }).catch(function(err) { // Error callback where reason is the value of the first rejected promise layer.alert(err); }); },$scope.falseList);
参考文章:
1、http://jsfiddle.net/jsengel/mc3p01nb/
2、https://blog.csdn.net/shidaping/article/details/52398925
3、https://www.cnblogs.com/angel1254/p/6603411.html