2016-03-25 55 views
0

我有一個端點/user/?is_active=1這給了我如下因素響應投票在端點上並創建一個可觀察的結果

{ 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"}, 
    ] 
} 

我的目標是要表明活躍用戶的數量,並更新每60秒通過查詢數據在端點上(現在沒有socket ...)。 我有一個組件TestComponent,它使用服務UserService

@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看起來像這樣

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 
} 

我想輪詢enpoint每60秒UserService.activeUser是一個observable我可以訂閱,這給了我回應,每次我有新的列表活躍用戶。

回答

2

您可以使用interval運營商可觀察的是這樣的:

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

    (...) 
} 
+0

'debounce'也可以用我猜不是'interval'等。我對嗎? – micronyks

+1

謝謝@thierry,這個工程。但是這段代碼在1分鐘後進行第一次呼叫。有沒有辦法執行一次,然後繼續輪詢? –