사용자 데이터를 Observable로 가져 와서 첫 번째 관측 가능 데이터의 데이터를 사용하여 추가/병합하는 함수를 작성하려고합니다. 데이터를 하나의 관찰로, 나는이 작업을 수행 할 수 있지만, 여기 중첩 된 관찰 가능 객체 : 관측 가능 객체를 관찰 가능 객체의 속성으로 추가하고 언랩하기
관찰
의 중첩 반환에 작동 할 수 없습니다 그것에 속성으로 관찰과 관찰을 반환하는 함수라는 휴일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}}
관찰 휴일을 통해 매핑, 내가 데이터에 액세스 할 수 없습니다 것 같다? 아마 내가 아직 구독하지 않았기 때문에?
속성이 차라리 계산하는 것 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;
});
}
나는 이것을 이렇게 할 수있을 것이라고 생각했지만, 여전히 관찰 할 수있는 것을 반환하고 물론 여기서는 구독 할 수없고 반환 할 수는 없다.
flatMap 당신의 친구 –
flatMap 좋은 지적이야 –