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()
发出一个事件。
如何制作序列中的每个项目都是自己发出的,而不是一次性发出整个序列?
在我的程序的某些部分,我需要整个序列。在其他人中,我需要寻找一个符合某些标准的特定元素。
答案 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
});