RxJs:分别发出序列的每个值

时间:2016-11-04 14:07:17

标签: angular typescript rxjs observable

RxJs,Typescript 1.8和Angular2。

我有一个返回Observable的函数。 Observable调用Web API,它返回一系列对象。这是我的实际代码:

  getClients(): Observable<IClient[]> {
    return this.backendService.get(`tracker/clients`)
      .map((resp: {}[]) => { return _.map(resp, createClientFromJson)})
      .map((clients: IClient[]) => {
        this.logger.debug(`Created ${clients.length} Clients from reply`);
        return clients;
      });
  }

backendService.get()的来电最终会调用http.get(),后者会返回Observable

我的代码消耗了Observable中的事件:

  loadClients() {
    this.getClients().subscribe((clients: IClient[]): void => {
      this.clients = this.clients.concat(clients);
      this.logger.debug(`Got ${clients.length} clients, now have ${this.clients.length}.`);
    })
  }

这一切都有效。但是我的Observable会发出一次 - 带有一系列N个元素。如果Web API返回20个项目的序列,则只会向loadClients()发出一个事件。

如何制作序列中的每个项目都是自己发出的,而不是一次性发出整个序列?

在我的程序的某些部分,我需要整个序列。在其他人中,我需要寻找一个符合某些标准的特定元素。

2 个答案:

答案 0 :(得分:2)

试试这个

this.getClients().flatMap(clients => Observable.from(clients)).subscribe(client => {
   // do something with client
})

答案 1 :(得分:2)

this.getClients().switch(v => v).subscribe(clients => {
  // your original code 
});