In actual business, it is often necessary to wait for several requests to be completed before proceeding to the next step. But $http in angularjs does not support synchronous requests.
Solution one:
$http.get('url1').success(function (d1) { $http.get('url2').success(function (d2) { //处理逻辑 }); });
Solution two:
The methods in then will be executed in order.
var app = angular.module('app',[]); app.controller('promiseControl',function($scope,$q,$http) { function getJson(url){ var deferred = $q.defer(); $http.get(url) .success(function(d){ d = parseInt(d); console.log(d); deferred.resolve(d); }); return deferred.promise; } getJson('json1.txt').then(function(){ return getJson('json2.txt'); }).then(function(){ return getJson('json1.txt'); }).then(function(){ return getJson('json2.txt'); }).then(function(d){ console.log('end'); }); });
Solution 3:
The first parameter of the $q.all method can be an array (object). After the contents in the first parameter are executed, the method in then will be executed. All return values of the first parameter method will be passed in in the form of arrays (objects).
var app = angular.module('app',[]); app.controller('promiseControl',function($scope,$q,$http) { $q.all({first: $http.get('json1.txt'),second: $http.get('json2.txt')}).then(function(arr){ console.log(arr); angular.forEach(arr,function(d){ console.log(d); console.log(d.data); }) }); });
The above is the detailed content of Summary of how angularjs handles multiple asynchronous requests. For more information, please follow other related articles on the PHP Chinese website!