我有以下代碼:等待所有觀察到的與rxjs
this.hubService.sendScopedCommand(Constants.hangarCommands.getHangarsOfPlayer).then((result: ICommand) => {
let hangars: IHangar[] = result.arguments[0];
for (let hangar of hangars) {
this.pieceService.getGroupedPieces(hangar.pieces).subscribe(group => hangar.groupedPieces = group);
}
this.hangars$.next(hangars);
}, (ex: any) => this.hangars$.error(ex));
所以基本上,sendScopeCommand
通過的WebSocket發送的東西,當WebSocket的接收到響應執行then
功能。在這一點上,我得到了一個對象的數組,我把它放在hangars
。
在這些對象中,我有一個玩家擁有的所有棋子的數組。可以有多個相同的片類型,所以我做了一個函數來將它們分組:getGroupedPieces
。它的代碼如下:
public getGroupedPieces(pieces: IPiece[]): Observable<IGroupedPiece[]> {
return Observable
.from(pieces)
.groupBy(p => p.pieceTypeId)
.flatMap(p => p.toArray())
.map(p => { return <IGroupedPiece>{ amount: p.length, piece: p[0] }; })
.toArray();
}
此代碼的工作原理,但我敢肯定,這是不正確的。事實上,我認爲hangars
甚至在for
循環中的可觀測值完成之前在可觀測值上發射。
我想在這裏等待所有這些observable完成,然後在Observable上發射hangars
。
爲什麼不發射訂閱被調用時的事件? –