Ceci est une question basée sur ma question précédente here. Pour l'essentiel, j'ai utilisé la méthode $ q.all() pour résoudre plusieurs appels http. Ensuite, je filtre et fusionne les deux sources de données.
Tout cela fonctionne très bien. Mais je veux que l'un de mes deux flux se rafraîchisse toutes les 5 minutes. Normalement, je ferais cela en annexant la minuterie suivante à la fin de mon code
var timer = $scope.intervalFunction = function() {
$timeout(function() {
/* function to call $http.get again */
$scope.intervalFunction();
}, 300000)
};
timer();
$timeout.cancel(timer);
Ma question est, puisque je ne définit pas les appels http comme des fonctions distinctes, et je aussi « fusionner » les deux sources, Comment puis-je appeler l'une de ces sources seulement, puis mettre à jour en conséquence sans faire plusieurs copies d'éléments de liste (ce qui est arrivé à moi dans de nombreuses tentatives).
Merci!
jsFiddle here
Je pense que vous avez raison. Je suis à la recherche de bons exemples, mais je suis à court. donc si je: Q.Tous de $ (promesses) .alors (fonction (réponse) { métadonnées = response.metadataPromise.data; \t \t métriques = response.metricsPromise.data; joinMetadataAndMetrics(); }). catch (erreur) (fonction (erreur) { console.log (erreur); }); Comment faire cette deuxième requête et activer un timeout $? – KateJean
@KateJean, j'ai dit '$ timeout', mais je veux dire' $ interval'. Et j'ai mis à jour la réponse, vérifiez-la. –
vous avez certainement raison. En effet - je suis capable d'obtenir l'appel à travailler toujours 5 minutes d'intervalle comme je le voulais. Cependant, au lieu des entrées de liste qui sont simplement mises à jour avec les nouvelles informations, les entrées de la liste apparaissent à nouveau avec les entrées précédentes. Donc, si j'ai 10 entrées le premier appel, je vais soudain avoir 20 le deuxième appel. J'ai mis la fonction joinMetadataAndMetrics() dans ma partie .then du requestEveryFiveMinutes() (parce que je pensais que la fusion de données devrait être refaite). Évidemment, cela provoque la répétition, mais je ne suis pas sûr de savoir comment le résoudre. – KateJean