2016-08-15 13 views
1

$ q.all()を使用して複数の応答を取得すると、同じ値が返されます。私は約束の宣言と同じくらい多くのオブジェクトを取得しますが、すべての「名前」フィールドは同じ値(最後のもの、3)を持ちます。

.controller('myCtrl', function ($scope, $state, $q, myService) { 

    $scope.myList = []; 

    $scope.create = function() { 
     var newObject; 
     var promises = []; 
     for(var i = 0; i < 4; i++){ 
     newObject = { name: i }; 
     promises[i] = myService.create(newObject); 
     } 
     $q.all(promises).then(
     function (response) { 
     $scope.myList = response; 
     } 
    ); 
    }; 
} 

そして、ここに私のサービスです:

.service('myService', function ($http, $q, baseURL) { 

     this.create = function(object) { 
     var deferred = $q.defer(); 
     //console.log shows that object still has the proper 'name' value 
     $http.post(url, object).then(
      function (response) { 
       // console.log shows that all response objects have the same 'name' value. 
       deferred.resolve(response); 
      } 
     ); 
     return deferred.promise; 
     }; 
} 

それは角度での約束に私の最初のアプローチですので、任意の入力が認識されます。

+0

'promises [p] = myService.create(newObject);'の 'p'は何ですか? – stevenelberger

+0

タイポ、上に固定、ありがとう!問題は残っています –

+0

この行のオブジェクト '$ http.post(url、object)'はすべて正しい名前を持っていますが、then関数の中では、それぞれの 'response'オブジェクトは同じ名前の値を持っていますか? – stevenelberger

答えて

2

ループ内でnewObject宣言を移動することで、変数を再宣言すると、promiseは前の値のコピーを自身に保持します。

0

私はそれが何をしようとしているのか分かりませんが、あなたのコードは書かれていますが、毎回あなたの約束を上書きしているので、最後の名前になるでしょう。あなたは次のような何かをする必要があります:

 var newObject; 
    var promises = []; 
    for(var i = 0; i < 4; i++){ 
    newObject = { name: i }; 
    var promise = myService.create(newObject); 
    promises.push(promise); 
    } 
    $q.all(promises).then(
    function (response) { 
    $scope.myList = response; 
    } 
); 

};

+0

promises.push(値)と同じ約束[インデックス] =値と同じですか? –

+0

いいえ、あなたは実際に配列を埋めることはありませんでした。毎回それを上書きしていました。 –

+0

プッシュを使用して同じ繰り返し応答を受信して​​います。 –