这应该是一个简单的查询,但是我似乎无法使其正常运行或找到如何完成它的方法。
我在数组中列出了某个集合的可接受ID。我想对该集合中与其中一个ID匹配的每个项目执行get
。有点像常用array-contains
的相反。例如:
const acceptableIds = ['id1', 'id2', 'id3']
const myCollectionDispose = await db
.collection('myCollection')
.where('id', 'is-in-array', acceptableIds)
.onSnapshot(doSomething)
我知道我可以在acceptableIds
上用Promise.all
进行映射来获取它们,但是对于这种特殊情况,我还需要在其末尾设置onSnapshot
(正如您在示例代码中看到的那样),所以不会这样做。
无论如何,最好的方法是什么?
要么可以使用where通过id来获取myCollection
的项,要么可以在onSnapshot
生成的数组上设置Promise.all
。以防万一后者是相关的,以下是该代码:
const acceptableIds = ['id1', 'id2', 'id3']
const myCollectionDispose = await Promise.all(
acceptableIds.map(id => {
return db
.collection('myCollection')
.doc(id)
.onSnapshot(doSomething)
})
)
谢谢!
答案 0 :(得分:1)
您可以将每个Promises保存在一个数组中,然后在每个Promise.all()完成后使用它们。
const acceptableIds = ['id1', 'id2', 'id3']
const promises = []
for (var i = 0; i < acceptableIds.length; i++) {
promises.push(
db.collection('myCollection')
.where('id', 'array-contains', acceptableIds[i])
.onSnapshot( /* Do Something */ )
)
}
Promise.all(promises).then(() => {
// Whatever you need to do next with all the snapshots (e.x. remove them all)
})