如何合并另一个observable属性的observable [英] How to merge an observable that is a property of another observable

查看:186
本文介绍了如何合并另一个observable属性的observable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我创建了这个函数

$ p $ getAllHolidaysAndUsers(){

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

});
}

它返回一个像这样的对象

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

$ / code $ / pre

我想要一个像这样的对象

pre $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $'$'$'$ / $ /数组[1]
}

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

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

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

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

});

但是因为我必须循环项目在第一个例子中,它只返回最后一个结果,所以这个技巧是不行的

这是抢劫犯 你可以这样做:

  getAllHolidaysAndUsers(){
return this.holiday
.switchMap(items => Observable.from (item))
.flatMap(item => {
return this.af.database.object(`/ User / $ {item.userIdKey}`)
.map(user = > {
item.user = user;
return item;
});
})
.toArray();
}


I have a list of holidays each with a user id attached to them. I would like to merge the retrieved user data to each holiday record so it returns a single observable.

I created this function

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;

 });
}

it returns an object like this

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

I would like an object like this

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

I am struggling to access the user observable in a single subscription. Currently I'm doing nested subscribes which I know is bad form.

I've managed to get a similar example working like this

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

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

});

But because I have to loop through items in the first example it only returns the last result, so this technique isn't working

Here's the plunker

解决方案

You could do it like this:

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();
}

这篇关于如何合并另一个observable属性的observable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆