Angular RxJs:分别发出序列的每个值
RxJs、Typescript 1.8和Angular2 我有一个函数,它返回一个可观察的。Observable调用web API,该API返回一系列对象。这是我的实际代码:Angular RxJs:分别发出序列的每个值,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,RxJs、Typescript 1.8和Angular2 我有一个函数,它返回一个可观察的。Observable调用web API,该API返回一系列对象。这是我的实际代码: getClients(): Observable<IClient[]> { return this.backendService.get(`tracker/clients`) .map((resp: {}[]) => { return _.map(resp, createClien
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;
});
}
这一切都有效。然而,我的可观测物体只发射一次——由N个元素组成的序列。如果web API返回20个项目的序列,则只有1个事件将发送到loadClients()
如何使序列中的每个项都由自身发出,而不是一次发出整个序列
在我程序的某些部分,我需要整个序列。在其他情况下,我需要寻找一个符合某些条件的特定元素。试试这个
this.getClients().flatMap(clients => Observable.from(clients)).subscribe(client => {
// do something with client
})
试试这个
this.getClients().flatMap(clients => Observable.from(clients)).subscribe(client => {
// do something with client
})
这会导致
可观察的
还是可观察的
?我这样问是因为我尝试了一些类似的方法,但它导致了可观察的可观察,这很难处理。只要做flatMap(clients=>clients)
我最终选择了flatMap(clients=>clients)
,而不是可观察。从(…)
@John,如果使用map
而不是flatMap
a.k.aconcatMap
,则会产生嵌套的可观察性。它具有将内部可观察值调整为数值的能力,这将导致可观察
或可观察
?我这样问是因为我尝试了一些类似的方法,但它导致了可观察的可观察,这很难处理。只要做flatMap(clients=>clients)
我最终选择了flatMap(clients=>clients)
,而不是可观察。从(…)
@John,如果使用map
而不是flatMap
a.k.aconcatMap
,则会产生嵌套的可观察性。它能够将内部可观测值调整为值这一点很值得了解,但在我的用例中,我实现了一个函数getEachClient()
,它应该自己发出每个IClient
。使用开关
将(似乎)导致每个IClient
以其自身的1元素顺序发出。使用flatMap
似乎更适合我的用例。了解这一点很好,但在我的用例中,我正在实现一个函数getEachClient()
,它应该自己发出每个IClient
。使用开关
将(似乎)导致每个IClient
以其自身的1元素顺序发出。使用flatMap
似乎更适合我的用例。
this.getClients().switch(v => v).subscribe(clients => {
// your original code
});