2013-08-02 8 views
8

コードを考えてみましょ解決します親コールによって返されるデータに依存します。戻り、相互に依存非同期約束が

私がしたいこと:親コールだけでなく、すべてが完了したときにリゾルバーを返します。

2つの呼び出しが最初の呼び出しに依存しているため、$ q.all()は使用できません。

つまり、myAppControllerは、3つの呼び出しがすべて完了した後にのみロードする必要があります。あなたはあなたの問題を解決するために、連鎖約束と$ Qサービスを使用する必要があり

答えて

9

は、以下のサンプルコードを使用.Justそれは

myApp.factory('Resolver', ['$http','$q', function ($http,$q) { 
       return function() { 
        var deferred = $q.defer(); 

        $http({ url: '/someurl', method: "GET" }).then(function (data) { 
         return $http({ url: '/someurl', method: "GET" }) 
        }).then(function (data) { 
         return $http({ url: '/someanotherurl', method: "GET" }) 
        }).then(function (data) { 
         deferred.resolve(data); 
        }); 
        return deferred.promise; 

       } 
      }]); 
+0

こんにちはアジャイ!すぐ返事をありがとう。しかし、チェーンを使用すると、最初の呼び出しで返されたデータを後続の呼び出しに渡すことができると思いますか? – AlwaysALearner

+0

はいすべての関数の中のデータは前の関数から返されたデータです –

+0

連鎖は私の必要性にはうまく適合しませんでした。私はネストされた呼び出しのために行きました。しかし、$ qは本当に私を助けてくれました。ありがとうございました。投票しました! :) – AlwaysALearner

0

を動作するはずですこれは私の作品:

  resolve : { 
       message: function($q, $route, Restangular) { 

        var msgId = $route.current.params.msgId; 
        var deferred = $q.defer(); 

        Restangular.one('message', msgId).get().then(function(message) { 
         Restangular.one('file', message.audioFile.id).get().then(function (blob) { 
          message.blob = blob; 
          deferred.resolve(message); 
         }); 
        }); 
        return deferred.promise; 
       } 
      }