AngularJSの$qサービスを使ってhttpリクエストを複数実行する方法を確認しました。
デモとコードサンプルはこちら。
※目次をクリックすると目次の下部にコンテンツが表示されます。
$httpサービスのプロミスオブジェクトをチェーン
$httpサービスはプロミスオブジェクトをリターンするので、このプロミスオブジェクトをチェーンして複数のhttpリクエストを順番に実行できます。
例)3つのhttpリクエストを順番に実行
例)3つのhttpリクエストを順番に実行
$scope.chain = function() { $scope.results1 = []; $http.get("/ng/q_chain.php?first=5").then(function onSuccess(response) { $scope.results1.push(response.data); $http.get("/ng/q_chain.php?second=1").then(function onSuccess(response) { $scope.results1.push(response.data); $http.get("/ng/q_chain.php?third=3").then(function onSuccess(response) { $scope.results1.push(response.data); }); }); }); };
qサービスのallメソッド
$qサービスのallメソッドで複数のpromiseを一つのpromiseとして集約して処理できます。
個々のpromiseで実行された結果を集約して一つのpromiseオブジェクトをリターンします。
例)3つのhttpリクエストを集約してまとめて実行
個々のpromiseで実行された結果を集約して一つのpromiseオブジェクトをリターンします。
例)3つのhttpリクエストを集約してまとめて実行
$scope.all = function() { $scope.results2 = []; var first = $http.get("/ng/q_chain.php?first=5"), second = $http.get("/ng/q_chain.php?second=1"), third = $http.get("/ng/q_chain.php?third=3"); $q.all([first, second, third]).then(function(result) { angular.forEach(result, function(response) { $scope.results2.push(response.data); }); }); };
サンプルコード
①$httpサービスをチェイン
3つのhttpリクエストを一つずつ順番に実行し、1つのhttpリクエストの実行結果取得後にhttpリクエストを実行。
②$qサービスのallメソッドで3つのhttpリクエストを集約して実行
3つのhttpリクエストを結果の取得を待たずに続けて実行し、3つのhttpリクエストの実行結果を取得した段階で3つ結果を順番に集約して実行。
③$qサービスのallメソッドを使ってhttpリクエストをループ処理
配列データから取得したデータを使ってループ処理で動的に$httpリクエストを生成し、この$httpリクエストを$qサービスのallメソッドに登録し、3つのhttpリクエストを集約して実行。
デモとコードサンプルはこちら。
3つのhttpリクエストを一つずつ順番に実行し、1つのhttpリクエストの実行結果取得後にhttpリクエストを実行。
②$qサービスのallメソッドで3つのhttpリクエストを集約して実行
3つのhttpリクエストを結果の取得を待たずに続けて実行し、3つのhttpリクエストの実行結果を取得した段階で3つ結果を順番に集約して実行。
③$qサービスのallメソッドを使ってhttpリクエストをループ処理
配列データから取得したデータを使ってループ処理で動的に$httpリクエストを生成し、この$httpリクエストを$qサービスのallメソッドに登録し、3つのhttpリクエストを集約して実行。
デモとコードサンプルはこちら。