2016-04-08 16 views
1

私はオブジェクトの配列を持っていて、いくつかの要求を実行したい - オブジェクトごとに1つ。angularJS - 1つずつクエリを実行する方法は?

$ http-serviceは非同期モードで要求を実行するので、それを達成するにはどうすればよいですか?

は、非同期のように/

+0

使用の約束: http://jsfiddle.net/jsengel/0ryvkvph/あなたがそうあなたのコードまたは何を試してみました... – xelilof

+0

、それは最も近い解決策です。 – inspired

答えて

1

あなたは$はhttpのコールバックで次の要求を呼び出すことができますC#で待っています。このような 何か:

function sendRequestList(objectList) { 

    if (objectList.length > 0) { 
     var currentObject = objectList.pop(); 

     $http.get(/* request params here */) 
     .then(
      function() { 
       sendRequestList(objectList); 
      }, 
      function() { 
       sendRequestList(objectList); 
      } 
     ); 
    } 
} 

は、しかし、私はあなたが望むこの方法を達成しない方法を知りません。 このヘルプが必要です。

A +

+0

を投稿する必要があり – Monochromie

1

あなたはすべての要求が起こって前に終了させたい場合は、あなたが約束を生成するの角度$qサービスを使用して、すべての要求が行われた結果だけを返すことができます。誰かによって行われ、この例のように連鎖ご要望 へ

// all of this in a controller injecting $q 

function fetchAll(objects) { 
    var deferred = $q.defer(); 
    var done = 0; 
    var results = {}; 
    for(var i=0; i < objects.length - 1; i++) { 

     // a trick to avoid every iteration to share same i value 
     (function(index) { 
      $http.get(/* request params here */) 
      .then(
       function(data) { 
        results[index] = data; 
        // or results[object.anyProperty] = data; 
        done++; 
        // ensure all calls are successful 
        if (done === objects.length) { 
         deferred.resolve(); 
        } 
       }, 
       function() { 
        deferred.reject(); 
       } 
      ); 
     })(i); 

    } 

    return deferred.promise; 
} 

// and call it like this 

fetchAll(objects) 
.then(function success(result) { 
    // continue your business 
}, function error(result) { 
    // handle error 
}); 
関連する問題