私にはユーザーがいます...各ユーザーには、メンバーである複数のグループがあります。各ユーザーグループのメンバーシップは、ユーザードキュメントに埋め込まれた配列です。タスクコレクションがあり、各タスクには、ユーザーのグループに対応するauthorizedGroupsの配列が含まれています。ほとんどのタスクにはauthorizedGroupが1つだけありますが、いくつかのタスクにはいくつかのグループがあります。タスクは、あるユーザーによって別のユーザーに割り当てられます。
ユーザーが利用できるすべてのタスクをクエリし、クエリごとにリスナーを配置したいと思います。
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を返し、1セットの結果を提供するかonSnapshot()
、リスナーの停止を制御できるのは自分だけであるため、Promiseを返さない永続リスナーをアタッチするために使用できます。
複数のクエリの結果を聞きたい場合は、それぞれにリスナーを追加する必要があります。聞き取りが終わったら、Firestore SDKから返される約束の助けを借りずに、リスナーの購読を解除します。 。リスナーを追加および削除するタイミングを決定するのはあなた次第です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加