angularjs $q$http 处理多个异步请求
Posted BioMarkerInfo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了angularjs $q$http 处理多个异步请求相关的知识,希望对你有一定的参考价值。
angularjs $q、$http 处理多个异步请求
在实际业务中经常需要等待几个请求完成后再进行下一步操作。但angularjs中$http不支持同步的请求。
解决方法一:
$http.get(\'url1\').success(function (d1) { $http.get(\'url2\').success(function (d2) { //处理逻辑 }); });
解决方法二:
then中的方法会按顺序执行。
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\'); }); });
解决方法三:
$q.all方法第一个参数可以是数组(对象)。在第一参数中内容都执行完后就会执行then中方法。第一个参数的方法的所有返回值会以数组(对象)的形式传入。
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); }) }); });
解决方法四:
var app = angular.module(\'app\',[]); app.controller(\'directiveControl\',function($scope,$http,$q){ function getTxt(a) { var deferred = $q.defer(); $http.get(\'1.json\') .success(function (d) { console.log(a); deferred.resolve(); }) return deferred.promise; } getTxt(1).then(function(){ return getTxt(2); }).then(function(){ return getTxt(3); }).then(function(){ return getTxt(4); }).then(function(){ return getTxt(5); }).then(function(){ console.log(\'end\'); }); });
$q的详细使用方法网上的有很多教程。我也是刚接触。上面的代码是我按我的理解写的,经过了测试没有问题。
以上是关于angularjs $q$http 处理多个异步请求的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS中的$http缓存以及处理多个$http请求