- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 angular 和 rxjs 的新手,我正在尝试使用 angularfire2
和 rxjs
从 firebase
获取三个不同的值,并将其作为 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/
在我的情况下,首先可以并行执行多个请求,在这些请求完成后,另一个请求将与先前的结果一起发送,伪代码看起来像 let uploads$ = [obs1$, obs2$, obs3$]; Observab
我正在尝试使用 mergeMap在 rxjs6我收到了这个错误: Property 'mergeMap' does not exist on type 'Observable' 我试过了import
我完全不明白 mergeMap 的用途。我听说有两种解释: 这就像 .NET LINQ 中的 SelectAll() - 不。 它是 RxJS merge 和 map 的组合 - 不(或者我无法复制它
我有一个 Observable,其中每个新值都应该引起一个 HTTP 请求。在客户端,我只关心最新的响应值;但是,我希望每个请求都能完成以进行监控/等。目的。 我目前拥有的是这样的: function
遵循 Stack Overflow 帖子中描述的最佳实践:Angular RxJS When Should I Unsubscribe From Subscription ,考虑这个 Angular
当我使用 Angular HttpClient 发出 GET 请求时,我会得到一个 observable 并在 RxJS 运算符 mergeMap 中处理它。 现在它一次又一次地抛出 404,我想捕获
我有一个可观察的流。第一个运算符是一个 mergeMap,它返回一个可观察值数组。然后我必须有第二个 mergeMap 来从第一个 mergeMap 的返回中获取最终值。我觉得第二个 mergeMap
我有一个可观察的流。第一个运算符是一个 mergeMap,它返回一个可观察值数组。然后我必须有第二个 mergeMap 来从第一个 mergeMap 的返回中获取最终值。我觉得第二个 mergeMap
抽象问题 有没有什么方法可以按照外部可观察对象的原始顺序使用 mergeMap 的结果,同时仍然允许内部可观察对象并行运行? 更详细的解释 让我们看一下两个合并映射运算符: mergeMap ...它
尝试使用 http.get 请求 URL 将经度和纬度从地理位置服务提取到 list.service。 第一期: businesses Property 'businesses' does not e
TLDR:工作示例在这个问题的最后一个代码块中。查看 @bryan60 的答案,了解使用 concat 而不是 mergeMap 的工作示例。 我试图按顺序运行多个远程请求,但只执行了第一个可观察对象
我有两个相同效果的实现,并且都有效。我很难理解两者之间的差异,哪个更“正确”。 请在下面找到它们: 选项 1. IDE 无法确定 instance 的类型在最后 map . pollingSt
在此 mergeMap 的大理石图中, 你怎么读这个表达式? // Kind of, looks like an em-dash near the end mergeMap(i => 10*i--10
在 rxjs5 文档中,它提到“为了减少多态性并从运算符中获得更好的性能,一些运算符已被拆分为多个运算符”。它的实际含义是什么以及如何使用 mergeMapTo 运算符? 最佳答案 来自docs ,m
我试图理解为什么 Rxjs 的 mergeMap 在传入身份函数时会变平 of(['click', 'tap']) .pipe( mergeMap(_ => _), tap
我试图理解为什么 Rxjs 的 mergeMap 在传入身份函数时会变平 of(['click', 'tap']) .pipe( mergeMap(_ => _), tap
我看了一个关于如何在 2 个可观察对象上使用 mergeMap() 的教程,但我仍然不清楚如何将它与超过 2 个可观察对象一起使用。 教程链接如下: https://www.youtube.com/w
在 api 调用获取数据后,我需要在 FETCH_DATA_SUCCESS 上调用一些进一步的操作。 'RESET_IMAGE_DATA' 和 'INITIALISE_FILTERS' 操作必须在每次
我需要你的帮助:) 我使用了 angular 7 和 Rxjs。为了测试,我使用了 Jest。 我的组件在 2 个 httpClient 之间使用 MergeMap,就像这样: addPost() {
如何将 mergeMap 操作排入队列,以便只有在前一个操作完成后才执行一个又一个操作? 最佳答案 您需要使用 concatMap,而不是 mergeMap。 关于javascript - RxJs
我是一名优秀的程序员,十分优秀!