2016-11-04 8 views
0

RxJs、Typescript 1.8、Angular2。RxJs:シーケンスの各値を別々に出力する

私は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()への呼び出しは、最終的にObservableを返す、http.get()を呼び出します。

観察可能からイベントを消費し、私のコード:

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要素のシーケンスで1回だけを出力します。 Web APIが20個のアイテムのシーケンスを返す場合、には1つのイベントだけが送出されます。

シーケンス全体を一気に放出する代わりに、シーケンス内の各アイテムが単独で放出されるようにするにはどうすればよいですか?

プログラムの一部では、シーケンス全体が必要です。他には、いくつかの基準に合致する特定の要素を探す必要があります。

答えて

1

が、この結果は `観察可能 `や `観察可能な<観察可能 >`でウィルこの

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

を試してみてください?私はこれらの行に沿って何かを試したので尋ねますが、観察可能な観察可能な結果となりました。これは対処が困難でした。 –

+2

ちょうど 'flatMap(clients => clients)' –

+0

'Observable.from(...)ではなく' flatMap(clients => clients) 'に行きました。 –

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

これは知っておいてよかったですが、私の使用例それぞれ 'IClient'を単独で発行する関数getEachClient()を実装しています。 'switch'を使用すると、各IClientが自身の1要素シーケンスで出力されるようになります(思われる)。 'flatMap'を使うことは、私のユースケースにもっと自然にフィットするように思えます。 –

関連する問題