2017-10-12 4 views
0

J'ai un service Web qui fournit des informations sur la (dernière) chanson en cours de lecture sur une radio.Vérifier le changement d'API avec des données observables et mettre à jour

Comment mon observable peut-il mettre à jour lui-même les données de ma requête http?

Mon fournisseur:

load() : Observable<{}> { 
    return this.http.get(this.URL).map(res => res.json()); 
    } 

Mon élément:

this.radio.load().subscribe(data => { 
    console.log(data) 
}) 

Ce que je veux, est essentiellement "données" à être mis à jour à chaque fois que le changement de réponse du service Web! Comment puis je faire ça ?

Merci beaucoup

+0

Est-ce que cela signifie que vous voulez faire un appel à ce service web chaque quantité X de temps? – Catalyst

+0

Oui, chaque fois que les données changent, sauf que je n'ai pas un moyen de savoir quand la chanson est terminée, donc je ne sais pas quand les données changent. – Joni

Répondre

0

Vous pouvez faire quelque chose comme ceci: Dans votre composant, appelez load() toutes les 10 secondes, et vérifier si les données ont changé (je crois que vous voudriez enregistrer une propriété sur votre composant qui contient les données les plus récentes).

Voici comment faire avec RxJS:

IntervalObservable.create(10 * 1000 /* 10 seconds */) 
    .takeWhile(() => this.alive) // only fires when component is alive 
    .subscribe(() => { 
     .radio.load() 
     .subscribe(data => { 
      /* ...check if data has changed... */ 
      console.log(data); 
     }); 
}); 

En ce qui concerne this.alive - c'est simplement juste une propriété sur votre composant qui doit être défini sur false lorsque le composant est détruit (c.-à appeler ngOnDestroy), et doit être défini sur true lorsque le composant est initialisé (probablement sur ngOnInit).

(vous pouvez, bien sûr, utiliser la façon plus traditionnelle setInterval et clearInterval de faire la même chose.)