gpt4 book ai didi

angular - 这是在 angularfire2 中使用 rxjs MergeMap 的正确方法吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:58 24 4
gpt4 key购买 nike

我是 angular 和 rxjs 的新手,我正在尝试使用 angularfire2rxjsfirebase 获取三个不同的值,并将其作为 promise 返回。经过多次研究和尝试,我终于使用这段代码成功了。

这是代码(假设 afdb 是 angularfire 数据库):

getThreeValues() {
return this.afdb.list('firebaseref1').valueChanges().pipe(
map(data => {
return data.length;
}),

mergeMap(first => {
return this.afdb.object('firebaseref2').valueChanges().pipe(
map(second => {
return ({first: first, second: second})
}),
take(1)
);
}),

mergeMap(firstsecond => {
return this.afdb.list('firebaseref3').valueChanges().pipe(
map(third => {
return ({...firstsecond, third: third})
}),
take(1)
);
}),

take(1))
.toPromise();
}

代码有效,我得到了 promise ,它解析为包含我需要的三个值的对象。

问题是我不确定这是否是最好的方法(因为我不确定这段代码是如何工作的)。

最佳答案

因为您非常确定您只会获取 .valueChanges() 的第一个值,所以将它们包装到 .forkJoin() 中会更有效率> 而不是 .mergeMapping 他们一路。借助来自 javascript 的解构,您的代码可以看起来像这样简单得多:

getThreeValues() {
return forkJoin(
this.afdb.list('firebaseref1').valueChanges().pipe(take(1)),
this.afdb.object('firebaseref2').valueChanges().pipe(take(1)),
this.afdb.object('firebaseref3').valueChanges().pipe(take(1))
)
.pipe(
map(([first, second, third]) => ({
first: first.length,
second,
third
}))
).toPromise()
}

关于angular - 这是在 angularfire2 中使用 rxjs MergeMap 的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53275910/

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