我有用户...每个用户都有他/她所属的多个组。每个用户组成员资格都是嵌入在其用户文档中的数组。有一个任务集合,每个任务包含一个与用户组相对应的authorizedGroups数组。大多数任务只有一个授权组,但有些任务有几个组。任务由一个用户分配给另一用户。
我想查询用户可用的所有任务,并为每个查询设置侦听器。
使用get()已成功,但未提供我希望的活动侦听器。有没有一种方法可以为每个组生成侦听器? onSnapshot方法不会返回承诺。不清楚如何实现此目标。任何建议将不胜感激。
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)
}
答案 0 :(得分:1)
您可以使用@IBAction func shareButtonTapped(_ sender: UIButton) {
if let post = myTextField.text {
let user = Auth.auth().currentUser
if let user = user {
let userID = Auth.auth().currentUser!.uid
dataRef?.child("Users/\(userID)/Account/").updateChildValues(["Comment":post])
let alert = UIAlertController(title: "Message", message: "Comment Posted !", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
self.myTextField.text = ""
present(alert, animated: true)
}
}
}
返回一个Promise并给您一组结果,也可以使用get()
附加一个持久性侦听器,该侦听器不返回Promise,因为只有您自己可以控制侦听器何时停止。
如果您想收听多个查询的结果,则必须为每个查询添加一个侦听器,当您侦听完后,无需任何其他返回的promise即可从每个侦听器中取消订阅该侦听器。 Firestore SDK。由您决定添加和删除侦听器的时间。