我有两个要求。
/users
和/user/<id>/milpac
/users
产生一个User[]
可观察的物体,而/user/<id>/milpac
产生一个米尔克物体。
export class User {
join_date: string;
promotion_date: string;
user_id: number;
username: string;
milpac: Milpac;
}
export class Milpac {
user_id: number;
milpac_id: number;
real_name: string;
username: string;
rank: string;
rank_shorthand: string;
status: string;
primary_position: string;
bio: string;
join_date: string;
promotion_date: string;
}
首先,我使用以下方法检索了所有用户:
getAll(): Observable<User[]> {
const headers = new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': this.API_AUTH_HEADER
});
const options = { headers: headers };
return this.http.get<UserResult>(this.API_URL + '/users/active', options).pipe(map(r => r.data.users));
}
然后,过了一会儿,有必要将milpac加载到用户中:
getMilpac(userId: number): Observable<Milpac> {
const headers = new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': this.API_AUTH_HEADER
});
const options = { headers: headers };
return this.http.get<MilpacResult>(this.API_URL + `/user/${userId}/milpac`, options).pipe(map(r => r.data));
}
我现在的目标是通过使用Milpac
对象以某种方式将User
加载到User
对象中,并最终在可观察的流中发射它。
可观察结果应保持User[]
,但应按Milpac
填充User
字段。
我知道存在mergeMap等功能,但似乎无法使它们正常工作。有谁能指出我正确的方向?
答案 0 :(得分:0)
如前所述-这应该在服务器上完成。如果您仍然需要在客户端上执行此操作,则可以这样做:
Array.from
分散用户,以便一次获得一个人mergeMap
每个拥有帐户余额的用户,并立即将结果发送给该用户toArray
使您的用户重新回到阵列中我在这里创建了一个简化的展示柜:https://stackblitz.com/edit/rxjs-6mivga
请注意,这仅在流完成时才起作用(否则,toArray将永远不会发出)。如果不是这种情况,它会变得有些复杂,但是机制保持不变。