2017-06-08 3 views
1

これは前の質問hereに基づいた質問です。

私は本質的に、$ q.all()メソッドを使用して複数のhttp呼び出しを解決しました。次に、2つのデータソースをフィルタリングしてマージします。

これはすべてうまく機能します。しかし、私は2つのフィードのうちの1つを5分ごとに更新したい。通常、私は私のコードの末尾に次のタイマーを追加することでこれを行うだろう、私は別の機能として、HTTP呼び出しを定義していない、と私はまた、両方のソースを「併合」以来

var timer = $scope.intervalFunction = function() { 
    $timeout(function() { 
     /* function to call $http.get again */ 
     $scope.intervalFunction(); 
    }, 300000) 
}; 
timer(); 
$timeout.cancel(timer); 

私の問題は、あります、どのようにこれらのソースのうちの1つだけを呼び出すか、それに応じて複数のリスト項目のコピーを作成することなく(これは多くの試みで私に起こったことです)更新します。

ありがとうございました!

JSFiddle here

答えて

1

"私は私の2つのフィードの一つは、5分ごとにリフレッシュしたいです"。私はあなたが2つの$q.allリクエストのうちの1つでトリックを行うことができるとは確信していません。 $q.allラッパーの外で別のリクエストを行い、最初に$q.allリクエストを取得した後に$timeoutを開始するようアドバイスできます。

私はそれをテストしますが、この意志は作品を願っていなかったので、私は、このソリューションでは絶対にわからないことを、言う必要がある:

$q.all(promises) 
    .then(function(response) { 
    metadata = response.metadataPromise.data; 
    metrics = response.metricsPromise.data; 
    joinMetadataAndMetrics(); 
    requestEveryFiveMinutes(); 
    }) 
    .catch (error) (function (error) { 
    console.log(error); 
    }); 

function requestEveryFiveMinutes() { 
    $interval(function() { 
    // here you can make the needed http request 
    yourRequest() 
     .then(function() { 
     // handle the response as needed 
     }) 
     .catch(function(err) { 
     console.log(err); 
     }) 
    }, 300000); 
} 

そして、あなたのコントローラで$intervalを注入することを忘れないでください

+0

あなたは正しいと思います。私はいくつかの良い例を探していますが、私は不足しています。 ので、私が持っている場合: $ q.all(約束).then(関数(応答){ メタデータ= response.metadataPromise.data; \t \tメトリクス= response.metricsPromise.data; joinMetadataAndMetrics(); }))catch(エラー)(機能(エラー){ console.log(エラー); }); 2回目のリクエストを行い、$タイムアウトを有効にするにはどうすればよいですか? – KateJean

+0

@KateJean、私は '$ timeout'と言ったが、' $ interval'を意味する。そして、私は答えを更新した、それをチェックしてください。 –

+0

あなたは間違いなく正しいです。確かに - 私は望んでいたように5分間隔で働くように電話を受けることができます。 しかし、単に新しい情報で更新するリスト項目の代わりに、リスト項目は前の項目と再び表示されます。だから、もし私が最初の呼び出しで10のエントリを持っているなら、私は突然第2の呼び出しを20にするでしょう。 私はrequestEveryFiveMinutes()の私の.then部分にjoinMetadataAndMetrics()関数を置いています(私はデータマージをやり直す必要があると考えていたので)。明らかにこれが繰り返しの原因ですが、私はそれを解決する方法がわかりません。 – KateJean

関連する問題