2017-06-07 7 views
0

私はチェーンリクエストを実装しようとしています。これはX回繰り返され、最後のリクエストからの応答がないときに停止します。チェーンAPI前のリクエストの応答に依存するHTTPリクエスト

どのように動作する必要がありますか。例えば

最初私は

http://example.com/?skip=0 

と応答呼がある:

{ 
    skip=10 
}, 

Iは

http://example.com/?skip=10 
... 
http://example.com/?skip=20 

呼び出し、スキップに20応答が

{ 
    "message" : "You reach the end" 
} 
よりも

私はそこで停止する必要があります。しかし、私は応答で「スキップ」を取得し、次の要求にスキップする方法でそれらを繰り返すときに、要求を繰り返す必要があります。あなたはあまりにも多くのコールを持っていない場合は

おかげ

+0

何か試しましたか? – Maxime

+0

私が試したこと@Maxime確認してくださいと私は 私はRXのJSのオペレーターが、まだ見つかっていない何も便利に探しています...今しようとしている。.. 演算子は次のように:takeWhile、タイマー... – PottaG

+0

あなたは人々をしたい場合あなたが最初に試したことを投稿するべきです:)人々はあなたのために物事を作るためにここにいるわけではないので、人々はあなたを*助ける*ためにここに来ます。これまでに試したことであなたの答えを更新できますか? – Maxime

答えて

3

説明に基づいて、いくつかの依存クエリを連鎖させるのではなく、同じクエリを「改ページする」というのが実際にあるようです。そのためにはexpandを使用できます:

// Start with skip 
Observable.of({skip: 0}) 
    // Feeds the response resulting stream back into this function 
    .expand((response) => { 
    // Continue expanding if there is a skip parameter 
    if (response.skip >= 0) 
     return this.http.get(`http://example.com/?skip=${skip}`); 
    // Stop expanding if there is no more data 
    else 
     return Observable.empty(); 
    }, 1 /* Limit the number of consecutive queries*/); 
+0

ありがとう@pauldaniels – PottaG

-1

は、あなただけのように、以下の個々のメソッドとして一緒にそれらをチェーンことができます。 (それは100%の構文が正しくない場合、私は謝罪して、コードを言い換えています)

$scope.call1 = function (values) { 
    $.ajax({ 
     url: _url, 
     method: 'GET' 
    }) 
    .done(function (data) { 
     ...do stuff with data... 
     $scope.call2(data); 
    }) 
}; 

$scope.call2 = function (values) { 
    $.ajax({ 
     url: _url, 
     method: 'GET' 
    }) 
    .done(function (data) { 
     ...do stuff with data... 
     $scope.call3(data); 
    }) 
}; 

$scope.call3 = function (values) { 
    $.ajax({ 
     url: _url, 
     method: 'GET' 
    }) 
    .done(function (data) { 
     ...do stuff with data... 
     ...this is the end... 
    }) 
}; 

をして

でそれをすべてキックオフ:これは、あなたが返されたデータを変更し、各段階で、それに基づいて行動することができます
$scope.call1(params); 

これは、前のメソッドが終了した後でのみ、各メソッドを順番に呼び出します。 ロットを持っている場合(つまりforループの一種)、それらをキューイングタイプのシステムに追加する必要があります。

+0

基本的には1回の繰り返し回数ですか?それはひどいです –

+0

私はどれくらいの電話を持っているのか分かりません。それは時々データが1つのチャンクに吐き出されることがあり、私は1つのコールしか必要としないが、別のシナリオでは50のリクエストをする必要があるかもしれない。 – PottaG

+0

問題は、一連の要求をどのように連鎖させ、その実行は以前の実行の結果に依存するかということでした。それはまさに私が提供したコードがしていることです。 50件のリクエストがあったということだけが後で言及された。私が言ったように、私が与えたプロセスは、少量の通話に対して完全に有効です。 – DeclanMcD

関連する問題