実際のビジネスでは、次のステップに進む前に、いくつかのリクエストが完了するまで待つ必要があることがよくあります。ただし、angularjs の $http は同期リクエストをサポートしていません。
解決策 1:
$http.get('url1').success(関数 (d1) {
$http.get('url2').success(function (d2) {
//処理ロジック
});
});
解決策 2:
then 内のメソッドが順番に実行されます。
var app = angular.module('app',[]);
app.controller('promiseControl',function($scope,$q,$http) {
関数 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(関数(d){
console.log('end');
});
});
解決策 3:
$q.all メソッドの最初のパラメータには配列 (オブジェクト) を指定できます。最初のパラメータの内容が実行された後、then のメソッドが実行されます。最初のパラメーターのメソッドの戻り値はすべて、配列 (オブジェクト) の形式で渡されます。
var app = angular.module('app',[]);
app.controller('promiseControl',function($scope,$q,$http) {
$q.all({最初: $http.get('json1.txt'),2 番目: $http.get('json2.txt')}).then(function(arr){
console.log(arr);
angular.forEach(arr,function(d){
console.log(d);
console.log(d.data);
})
});
});
$q の詳細な使用法については、インターネット上に多数のチュートリアルがあります。私も初めてです。うまく話せなければ、ナンセンスなことをあえて話さないでしょう。上記のコードは私の理解に従って書かれており、問題なくテストされました。