gpt4 book ai didi

javascript - 是否可以为数组创建 onSnapshot 监听器

转载 作者:行者123 更新时间:2023-11-30 19:21:45 25 4
gpt4 key购买 nike

我有用户...每个用户都有多个他/她所属的组。每个用户组成员都是一个嵌入在他/她的用户文档中的数组。有一个任务集合,每个任务包含一个与用户组相对应的 authorizedGroups 数组。大多数任务只有一个授权组,但有些任务有几个组。任务由一个用户分配给另一个用户。

我想查询用户可用的所有任务,并为每个查询设置监听器。

使用 get() 已成功,但没有提供我所希望的主动监听器。有没有一种方法可以为每个组生成监听器? onSnapshot 方法不返回 promise 。不清楚我如何才能实现这个目标。任何建议将不胜感激。

created() {
const getTasksPerGroup = async (groups) => {
// Make a get request using each group in users group membership list
const queries = groups.map((group) => {
return this.$store.state.db
.collection('tasks')
.where('authorizedGroups', 'array-contains', group)
.where('taskAssignedTo', '==', this.$store.state.auth.user.displayName)
.get()
})

// Use Await Promise.all to acquire an array of querySnapshots
const result = await Promise.all(queries).then((querySnapshot) => {
return querySnapshot.map((querySnapshot) => querySnapshot.docs).reduce((acc, docs) => [...acc, ...docs])})

//Result is an array of querySnapshots...pushing each qs.data() to the tasks array
let tasks = []
result.forEach((qs) => {
let item = qs.data()
tasks.push(item)
console.log('tasks:', tasks)
this.$store.commit('tasks/mutate_tasksArray', tasks)
})
}
// Invoke async function that gets the user's groups array
getTasksPerGroup(this.allFirmGroups)
}

最佳答案

您可以使用 get(),它返回一个 promise 并为您提供一组结果,或者您可以使用 onSnapshot() 来附加一个持久的监听器,它不返回 promise ,因为只有您可以控制监听器何时停止。

如果你想监听多个查询的结果,你必须为每个查询添加一个监听器,当你完成监听后,取消订阅每个查询的监听器,而不需要任何返回的 promise 的帮助Firestore SDK。添加和删​​除监听器的时间由您决定。

关于javascript - 是否可以为数组创建 onSnapshot 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57385506/

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