2016-03-25 7 views
0

ich einen Endpunkt /user/?is_active=1 haben, die mir Folowing Antwort gibtPoll auf einem Endpunkt und erstellen eine beobachtbare des Ergebnisses

{ count: 123, 
    next: "next_page_url", 
    previous: null, 
    results: [ 
    {id: 323, name: "test"}, 
    {id: 324, name: "test2"}, 
    {id: 336, name: "test3"}, 
    {id: 328, name: "test4"}, 
    ] 
} 

Mein Ziel Anzahl der aktiven Nutzer zu zeigen, und aktualisieren Sie die Daten alle 60 Sekunden durch Abfragen auf dem Endpunkt (kein Sockel ... für jetzt). Ich habe eine Komponente TestComponent, die einen Service UserService verwendet.

@Component { 
    selector: 'test', 
    pipes: [Async], 
    template: `<div>{{totalActiveUsers}}</div>`, 
} 
export class TestComponent { 
    public totalActiveUsers; 
    constructor(userService: UserService) { 
     userService.activeUser.subscribe(data => { 
     this.totalActiveUsers = data.count; 
     }) 
    } 
} 

UserService sieht aus wie dieses

import {Http} from 'angular2/http'; 
import {Observable} from 'rxjs/Observable'; 
import {Users} from './user'; 

@Injectable() 
export class UserService { 
    public acitveUser: Observable<Users> = new Observable() 
    constructor(private _http: Http) { 

    } 
    getActiveUser() { 
     return this._http.get('/user/?is_active=1').map(res => res.json()) 
    } 
    ... 
    //incomplete 
} 

ich die enpoint alle 60 sec und UserService.activeUser zu sein ein observable abfragen wollen, die ich zeichnen kann, was mir die Antwort gibt jedes Mal wenn ich haben neue Liste von aktive Benutzer.

Antwort

2

Sie könnten die interval Betreiber von Observablen auf diese Weise verwenden:

export class TestComponent { 
    public totalActiveUsers; 
    constructor(userService: UserService) { 
    Observable.interval(60000).flatMap(() => { 
     return this.service.getActiveUser(); 
    }).subscribe((activeUsers) => { 
     this.totalActiveUsers = data.count; 
    }); 
    } 

    (...) 
} 
+0

'debounce' auch verwendet wird, kann ich andere erraten als' interval'. habe ich recht? – micronyks

+1

Danke @thierry, das funktioniert. Aber dieser Code macht den ersten Anruf nach 1 min. Gibt es eine Möglichkeit, es einmal auszuführen und dann weiter zu pollen? –

Verwandte Themen