gpt4 book ai didi

angular - 嵌套的 Observables : adding an observable as a property of an observable and unwrapping it

转载 作者:太空狗 更新时间:2023-10-29 19:34:46 27 4
gpt4 key购买 nike

我正在尝试创建一个将用户数据作为 Observable 的函数,并使用来自第一个 observable 的数据从查询中添加/合并数据,然后将所有这些数据作为一个 observable 返回,我可以这样做,但不能对返回嵌套的 observable

这是一个返回一个可观察对象的函数,该可观察对象的属性是 holidays

getAllUsersWithHolidays() {
return this.users.map(items => {
for (let item of items) {
item.holiday = this.af.database.list('Holiday',
{
query: {
orderByChild: 'userIdKey',
equalTo: item.$key
}
}
)
}
return items;
});
}

当我调用尝试拉出假期存储的数据时出现问题

this.summary$ = this.UserListService.getUserByEmail().mergeMap(user => { //get the user details to filter by team
return this.HolidayService.getAllUserWithHolidays().map(data => {
return data
.filter(team => team.team === user[0].team) //filters users by team
.map(item => { //map over combined data
return item.holiday
.map(hol => { // Hol is observable, build with property daysTaken
return {
firstname: item.firstname,
surname: item.surname,
holiday: hol.reduce((prev, curr) => {prev + curr.daysTaken, 0) //cannot access hol data
}
});
});
})
})

然后异步解包

 {{summary$ | async | json}}

在映射 holiday observable 时,似乎无法访问数据?也许是因为我还没有订阅?

我宁愿没有 observable 作为从 getAllUsersWithHolidays 返回的属性我宁愿先计算它

所以不要这样返回项目

{user: 'exampleName', holiday:fireBaseListObservable}

我会返回已经计算好的

{ user:'exampleName' , holiday: 20 }

但这样做也让我望而却步......

getAllUsersWithHolidays() {
return this.users.map(items => {
for (let item of items) {
item.holiday = this.af.database.list('Holiday',
{
query: {
orderByChild: 'userIdKey',
equalTo: item.$key
}
}
).reduce((prev, curr) => prev + curr.daysTaken, 0)
}
return items;
});
}

我以为我可以这样做,但这仍然会返回一个可观察对象,当然我不能在这里订阅并返回任何东西,这似乎永远行不通!

最佳答案

当您使用 mergeMap 从 getUsers -> usersWithHolidays 展开嵌套的可观察对象时,您只需要一个额外的 mergeMap 来展开每个用户的假期。唯一的麻烦是你嵌套的可观察对象是你的对象的属性。所以我们可以使用 Observable.from() 来处理它。

getAllUsersWithHolidays() {
return this.users.mergeMap(items => {
return Observable
.from(items)
.mergeMap(item => this.af.database.list(...)
.map(holiday => {
return {
...item,
holiday
};
})
);
});
}

关于angular - 嵌套的 Observables : adding an observable as a property of an observable and unwrapping it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42652331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com