2016-10-05 12 views
0

私は待機していないサービスを持っています。コンパイラはサービスからの呼び出しの後に行を解析していますが、それは私が望むものではありません。私はデバッグモードに入るとき、私は私がすべての要求が終了した後にのみプログラムがあることをするのを待っているq.allを、使用して問題を解決しただけで10ミリ秒またはそのサービスangularjsは、succes関数が終了するのを待っていません。

.factory('myService', ['$http', '$q', function($http, $q){ 
var deferObject, 
    myMethods = { 

     getDepartments: function(d) { 
      console.log("Am ajuns"); 
      var allDepartments=[]; 
      var promise=$http.get("http://localhost:8087" + "/projects/"+d); 
      var deferObject = deferObject || $q.defer(); 
      console.log("Am ajuns2"); 
      promise.then(

       // OnSuccess function 
       function(answer){ 
        console.log("Am ajuns3"); 
        // This code will only run if we have a successful promise. 
        deferObject.resolve(answer); 
          var setDepartments = new Set(); 

          for (var i = 0; i < answer.data.length; i++) { 
           setDepartments.add(answer.data[i].department); 

          } 

          setDepartments.forEach(function (value) { 
           var department = {name: value}; 
           allDepartments.push(department); 

          }); 
        console.log(allDepartments); 
        return allDepartments; 
       }, 
       // OnFailure function 
       function(reason){ 
        // This code will only run if we have a failed promise. 
        deferObject.reject(reason); 
       }); 

      return allDepartments; 
     }, 
     getData: function(d) { 
      var promise=$http.get("http://localhost:8087" + "/projects/"+d) 
      var deferObject = deferObject || $q.defer(); 

      promise.then(
       // OnSuccess function 
       function(answer){ 

        // This code will only run if we have a successful promise. 
        deferObject.resolve(answer); 
       }, 
       // OnFailure function 
       function(reason){ 
        // This code will only run if we have a failed promise. 
        deferObject.reject(reason); 
       }); 

      return deferObject.promise; 
     } 

    }; 

return myMethods; 

}]); 
+0

をgetDataとして使用すると、getDepartmentsは約束を返す必要があります。 –

+1

なぜ複数の約束の間で同じ 'deferObject'を共有していますか?両方のリクエストがまだ処理されている間に両方のファクトリメソッドを同時に呼び出すと、問題は解決します。 '$ http'コールを返してください。あなたは約束から戻ってくることはできません。そのように、呼び出しコードはそれを開始してから移動しました。約束が解決されるまでには、「戻る」ことは何もありません。それはあなたがミックスとマッチではなく、どこでも約束を使用する理由です。そして、あなたがある約束から帰ってくると、それは連鎖の次のものに与えられます。 – ste2425

+0

私は@ ste2425を理解していますが、httpを返信するだけでいいですか? –

答えて

0

のようなものの後にそこに私のデータを持っていますもっと遠く行く。

関連する問題