gpt4 book ai didi

typescript - 如何等待多个可观察流解析并将它们一起返回

转载 作者:行者123 更新时间:2023-12-04 15:41:00 24 4
gpt4 key购买 nike

colWithIds$ 下方的可观察管道中,我提供了一个 firestore 集合(单个对象数组)的可观察对象,我将其称为父文档。对于这些文档中的每一个,我都使用 flatMap 对关联文档进行一次调用,我将其称为子文档。然后我将父文档和子文档存储在局部变量中:

this.db.colWithIds$('parentCollection')
.pipe(
tap(parentDocs => this.parentDocs = _.keyBy(parentDocs, '_id')),
flatMap(parentDocs => combineLatest(parentDocs.map(doc => this.db.doc(`childCollection/${doc.childId}`).get()))),
map(snaps => convertSnaps(snaps)),
tap(childDocs => this.childDocs = _.keyBy(childDocs, '_id'))
).subscribe()

这种方法的问题:

  1. 有时父文档可用,但子文档不可用
  2. 我想把它放在一个服务中以供重用,所以以这种方式分配局部变量是有问题的。

我正在寻找一种方法,可以等到所有值都已解析并以下列形式返回单个对象:

{
parentDocs: [{}, {}, ...], // the documents
childDocs: [{}, {}, ...], // the documents
}

我对上述问题的其他解决方案持开放态度。提前致谢。

最佳答案

这是您要找的吗?这样您就不会为 parent 查询数据库两次。

this.db.colWithIds$(`parentCollection`).pipe(
map(parentDocs => _.keyBy(parentDocs, '_id')),
flatMap(parentDocs => combineLatest(_.map(parentDocs, parent => this.db.docWithId$(`childDocs/${parent.childId}`))).pipe(
map(childDocs => _.keyBy(childDocs, '_id')),
map(childDocs => ({parentDocs, childDocs}))
))
);

关于typescript - 如何等待多个可观察流解析并将它们一起返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57798069/

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