使用 Horizon 是否有更好的方法 "join" 数据?
Is there a better way to "join" data using Horizon?
我的数据在 RethinkDb 中看起来像这样:
[appointments]
{
id: 1,
date: "2016-01-01",
stylistId: 1,
}
[stylists]
{
id: 1,
name: "Sue",
}
在客户端,我想获取约会并将造型师嵌入到约会对象中,如下所示:
{
id: 1,
date: "2016-01-01",
stylist: {
id: 1,
name: "Sue",
}
}
我可以使用这个查询完成一些接近的事情:
return this.hz('appointments')
.find(appointmentId)
.fetch()
.toPromise()
.then(appointment => {
return this.hz('stylists').find(appointment.stylistId)
.fetch()
.toPromise()
.then(stylist => {
appointment.stylist = stylist;
return appointment;
});
})
.then(appointment => this.appointment = appointment);
我想知道是否有更简洁的方法来达到预期的效果。我知道 RethinkDb 支持连接,但它看起来不像在 Horizon 中公开。我对 RxJS 也不是很好,所以我想知道是否可以在那里更干净地完成连接。
尝试mergeMap
和map
组合
const appointmentFind$ = (appointmentId) => hz('appointments').find(appointmentId).fetch();
const stylistFind$ = (stylistId) => hz('stylists').find(stylistId).fetch();
appointmentFind$(appointmentId)
.mergeMap((appointment) => stylistFind$(appointment.stylistId)
.map((stylist) => ({ ...appointment, stylist })))
.subscribe((x) => console.log(x));
我把它写在这里了,所以它还没有经过测试,但它应该可以像这样工作
我的数据在 RethinkDb 中看起来像这样:
[appointments]
{
id: 1,
date: "2016-01-01",
stylistId: 1,
}
[stylists]
{
id: 1,
name: "Sue",
}
在客户端,我想获取约会并将造型师嵌入到约会对象中,如下所示:
{
id: 1,
date: "2016-01-01",
stylist: {
id: 1,
name: "Sue",
}
}
我可以使用这个查询完成一些接近的事情:
return this.hz('appointments')
.find(appointmentId)
.fetch()
.toPromise()
.then(appointment => {
return this.hz('stylists').find(appointment.stylistId)
.fetch()
.toPromise()
.then(stylist => {
appointment.stylist = stylist;
return appointment;
});
})
.then(appointment => this.appointment = appointment);
我想知道是否有更简洁的方法来达到预期的效果。我知道 RethinkDb 支持连接,但它看起来不像在 Horizon 中公开。我对 RxJS 也不是很好,所以我想知道是否可以在那里更干净地完成连接。
尝试mergeMap
和map
组合
const appointmentFind$ = (appointmentId) => hz('appointments').find(appointmentId).fetch();
const stylistFind$ = (stylistId) => hz('stylists').find(stylistId).fetch();
appointmentFind$(appointmentId)
.mergeMap((appointment) => stylistFind$(appointment.stylistId)
.map((stylist) => ({ ...appointment, stylist })))
.subscribe((x) => console.log(x));
我把它写在这里了,所以它还没有经过测试,但它应该可以像这样工作