我有以下代码:等待所有观察到的与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
。
为什么不发射订阅被调用时的事件? –