gpt4 book ai didi

javascript - Angular 4合并映射问题

转载 作者:行者123 更新时间:2023-11-28 04:19:51 25 4
gpt4 key购买 nike

我正在使用 Angularfire,我需要“连接”键上的两个节点。这是我的方法:

  mergetest(userkey){
return this.db.list(`userOwnHangouts/${userkey}`)
.mergeMap((hangouts) => {
console.log('the merge hangout: ', hangouts.$key) //undefined
return this.db.list(`hangoutInterestedUsers/${hangouts.$key}`)
})
.subscribe(x => console.log('subscribe: ', x))
}

如您所见,当我尝试获取 $key 时,它是未定义的。虽然如果我只记录环聊,我确实会得到一组对象。

如何使用 mergeMap 返回一个包含第一个查询和第二个查询结果的可观察值?在这种情况下,环聊本身以及属于它们的用户?

在控制台中我得到: enter image description here

这些是我想要加入的 2 个节点: enter image description here enter image description here

@Maximus 这是我得到的结果,我可以获取数组中的所有对象来与 ngFor 一起使用吗?[![在此处输入图像描述][4]][4]

最佳答案

这应该适用于一般情况:

return this.db.list(`userOwnHangouts/${userkey}`)
// flattening the array returned by `list()`
.mergeMap((o) => {
return o;
})
.mergeMap((o) => {
return this.db.list(`hangoutInterestedUsers/${o['$key']}`).map((users) => {
return {...o, users: users};
});
})
.reduce((acc, v) => {
acc.push(v);
return acc;
}, [])
.subscribe(x => console.log('subscribe: ', x))
}

编辑:

但是因为 this.db.list 永远不会完成,所以我们不能在这里使用 reduce 。由于同样的原因,forkJoin 也不起作用。所以要走的路是combineLatest:

this.db.list(`userOwnHangouts/${userkey}`)
.switchMap((list: any[]) => Rx.Observable.combineLatest(
list.map((item: any) => this.db.list(`hangoutInterestedUsers/${item['$key']}`)),
(...results: any[][]) => {
list.forEach((item: any, index: number) => {
item["users"] = results[index];
});
return list;
}
))
.subscribe(x => console.log('subscribe: ', x))

关于javascript - Angular 4合并映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529059/

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