Nuxt.js+Firestoreでデータの連続取得
Nuxt.js、firestoreにてデータを取得し、さらに取得したデータを用いて新たなデータを参照したいです。
コレクション[user]には、ユーザー情報が入っており、各ユーザーIDに対応したドキュメント[userId0]にそのユーザーが参加しているチャットのchatIdが入っています。
コレクション[chat]には、chatIdごとにチャットの内容がコレクション[messages]の中のドキュメント[message0],[message1],...として入っています。
Firestoreの構造
*:collection
@:document
*user -@useIid0 -*chat -@chatId0 -@chatId1 -@userId1 -@userId2 *chat -@chatId0 -*messages -@message0 -@message1 -@chatId1
methodsに定義した関数
ユーザーに紐づいているチャットIDを取得
javascript
1getChatIdList (userId) { 2 const chatIdList = [] 3 const db = this.$fire.firestore.collection('user').doc(userId).collection('chat') 4 db.get() 5 .then((querySnapShot) => { 6 querySnapShot.forEach((doc) => { 7 chatIdList.push(doc.data()) 8 }) 9 }) 10 return chatIdList 11}
得たチャットIDから、メッセージを取得
javascript
1getChatMessages (chatId) { 2 const messages = [] 3 const db = this.$fire.firestore.collection('chat').doc(chatId).collection('messages') 4 db.get() 5 .then((querySnapShot) => { 6 querySnapShot.forEach((doc) => { 7 messages.push(doc.data()) 8 }) 9 }) 10 return messages 11}
createdの内容
上記の関数を使って、ユーザーが参加しているチャットのchatIdを取得し、処理が終わったら、chatIdを使って、そのチャットの内容をmessagesとして取得しようとしています。
javascript
1created () { 2 const self = this 3 async function get() { 4 const chatIdList = await self.getChatIdList() 5 const messagesList = [] 6 const messages = chatIdList.forEach(chatId => { 7 messagesList.push(self.getChatMessages(chatId)) 8 }) 9 } 10 get() 11}
しかし、実際にはchatIdListが空のままforEachが回ってしまいます。
どのようにすればデータの取得後、そのデータを用いて次の処理を行えるでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。