2017-05-11 5 views
-1
角度

でGETサービスの結果に基づいてサービスをポーリングする必要があります{url}/report/72?sortby=label1私は</p> <p>を次のように応答がありますレポートサービスを持っている角度</p> <p>でGETサービスの結果に基づいてサービスをポーリングする必要がある

応答

レポートは

{ 
    "id": "72", 
    "status": "computing" 
} 
012を計算している間私は私が得るまで、コールを再試行する必要が正常に完了の成功

{ 
"id": "72", 
"status": "completed", 
"data": { 
    "columns": ["uuid", "label1", "label3"], 
    "rows": [ 
     ["xyghj", 927, 955] 
    ] 
} 
} 

は応答して、ステータスを「完了」し、その後

+0

まだ試しましたか?完了したステータスを取得したときに解決する '$ q'遅延オブジェクトにリクエストをラップするだけで済みます。ポーリング間隔はどのようにすべきですか? – Phil

+0

ポーリング間隔は1秒にすることができます –

答えて

0

が同様年前に何かをした結果を延期。これはテストされていない、と私angularjsは弱いかもしれないが、アイデアはこれです:

function poll() { 
    service.checkPoll().then(function(payload) { 
     if (payload.status !== "completed") { 

      if (iShouldTryAgain) { 
       $timeout(function() { 
        poll(); 
       }, 1000); 
      } 
     } 
     else { 
      getResults(payload.data); 
     } 
    }, function(error){ 

    }); 
} 

checkPoll()約束を返し、あなたのAPI呼び出しの結果です。

payload.statusは、レポートの準備ができているかどうかを示します。

この関数は1秒ごとにポーリングを行いますが、iShouldTryAgainを使って永遠にそこに座らないようにしてください。たぶん最大値。

+0

どのようにデータがこれから抜け出しますか?呼び出し元に操作が完了したことを通知するためにここには何もありません。 – Phil

+0

結果レポートデータを処理するelseを追加しました。ステータスが完了していない限り、またはカウンタまたはタイマーに対して他のいくつかの "iShouldTryAgain"チェックが行われている間は、ポーリングを行います。 – Ben

関連する問題

 関連する問題