首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxFire如何使用防火墙查询?

RxFire如何使用防火墙查询?
EN

Stack Overflow用户
提问于 2020-09-17 10:34:52
回答 1查看 265关注 0票数 1

这个js还原可以很好地处理查询结果:

代码语言:javascript
复制
function toc(current) {
  return {....};
};
function getToc(data) {
  return = data.reduce((a, c) => Object.assign(a, {[c.id]: toc(c)}), {});
};

const query = db.collection(normCollection)
.where('a_id', '==', a_id )
.where('year', '==', year) 
.orderBy("id");
subscriptionNorm = collectionData(query, "id")
.subscribe(data => console.log(getToc(data)));

但是当我使用RxJ减少时,它就停止工作了。这和溪流的尽头有关,但是.但我不明白RxFire / RxJs如何处理流存储查询结果:

代码语言:javascript
复制
...
subscriptionNorm = collectionData(query, "id")
.pipe(reduce((a, c) => Object.assign(a, {[c.id]: toc(c)}), {}))
.subscribe(data => console.log(data));

更新这个很好,但是.:

代码语言:javascript
复制
...
subscriptionNorm = collectionData(query, "id")
.pipe(
  map(v => v.reduce((a, c) => 
    Object.assign(a, {[c.id]: toc(c)}), {})
  ),
)
.subscribe(data => console.log(data));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-17 11:15:50

关于rxjs还原操作符,您的假设是正确的。

“在可观察到的源上应用累加器函数,并在源完成时返回累积的结果”--从文档中,参见此处:RxJS减少文档

在您的示例中,源代码不会完成,因为Firestore就是这样工作的,它在没有完成的情况下无休止地运行,直到错误发生或手动取消订阅。

对于一个粗略的例子,您可以在管道中使用take(1)操作符,它将在发出1个事件后完成可观察到的源,因此reduce将工作,,但它扼杀了Fi还原可观察的背后的主要思想。

这是使用rxjs reduce 运算符:的方法。

代码语言:javascript
复制
subscriptionNorm = collectionData(query, "id").pipe(
  switchMap(data => from(data).pipe(
    reduce((a, c) => Object.assign(a, { [c.id]: toc(c) }), {})
  )),
).subscribe(data => console.log(data));

这是可能的,因为我正在切换到from(data),内部可观测性将被完成,因此reduce操作符将按照您的意愿工作。

但是,老实说,这太过分了,您可以保持已经实现了的方式。

代码语言:javascript
复制
subscriptionNorm = collectionData(query, "id").pipe(
  map(data => data.reduce((a, c) => Object.assign(a, { [c.id]: toc(c) }), {}))),
).subscribe(data => console.log(data));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63936216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档