如何合并属于另一个可观察量属性的可观察量

2024-02-04

我有一个假期列表,每个假期都附有一个用户 ID。我想将检索到的用户数据合并到每个假期记录中,以便它返回单个可观察值。

我创建了这个函数

getAllHolidaysAndUsers() {

  return this.af.database.list('Holiday').mergeMap(items => {
    for (let item of items) {
      item.user = this.af.database.object(`/User/${item.userIdKey}`);        
    }
    return items;

 });
}

它返回一个像这样的对象

{
  fromDate:'20/12/16',
  toDate:'21/12/16',
  user:fireBaseObservable
}

我想要一个这样的物体

{
  fromDate:'20/12/16',
  toDate:'21/12/16',
  user:Array[1]
}

我正在努力访问user可在单个订阅中观察到。目前我正在做嵌套订阅,我知道这是不好的形式。

我已经设法让一个类似的例子像这样工作

getHolidayInfo() {
  return this.getHolidaysByUserId().mergeMap(hol => {

  return this.UserList.getUserByEmail().map(user => { 
    return {hol:hol.date, user:user[0]}
  });

});

但因为我必须循环items在第一个示例中,它仅返回最后的结果,因此该技术不起作用

这是笨蛋 https://plnkr.co/edit/L3afagtLBfdscoShNKRl?p=preview


你可以这样做:

getAllHolidaysAndUsers() {
  return this.holiday
    .switchMap(items => Observable.from(items))
    .flatMap(item => {
        return this.af.database.object(`/User/${item.userIdKey}`)
            .map(user => {
                item.user = user;
                return item;
            });
    })
    .toArray();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何合并属于另一个可观察量属性的可观察量 的相关文章

随机推荐