2016-03-25 21 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分钟后进行第一次呼叫。有没有办法执行一次,然后继续轮询? –