问题描述
我在Angular中使用RxJS Observables,无法确定使用哪个运算符来发出单个流。我正在使用类型,并且有一个可观察到的发出此信号:
export interface user {
id: string,name: string,}
发出此信号的人:
export interface devices {
type: string,os: string,user_id: string,}
并试图将它们组合成一个可观察到的东西,这给了我:
export interface user {
id: string,devices: Array <{
type: string,}>
}
将设备根据其user_id映射到用户。
解决方法
您需要forkJoin
和一个内部管道来扩展用户的设备。
this.usersWithDevices$ = this.myService.getAllUsers().pipe(
switchMap(users => {
return forkJoin(users.map(user => {
return this.myService.getDevicesForUser(user.id).pipe(
map(devices => ({ ...user,devices })),);
}));
}),);
另请参阅我关于stackblitz的示例:https://stackblitz.com/edit/rxjs-98yygy?file=index.ts
,import { combineLatest,of } from 'rxjs';
import { map } from 'rxjs/operators';
const users$ = of([{id: '1',name: 'John'},{id: '2',name: 'Peter'}]);
const devices$ = of([{type: 'printer',userId: '1'},{type: 'scanner',userId: '2'}]);
const result$ = combineLatest([users$,devices$]).pipe(
map(([users,devices]) => {
return users.map(user => {
const devicesForCurrentUser = devices.filter(device => device.userId === user.id);
return {
...user,devices: devicesForCurrentUser
};
});
})
);
result$.subscribe(res => console.log(res));