前提・実現したいこと
firestoreからデータを取得するプログラムを組んでいます。
プロミスの扱いでうまくいかない部分があります。
発生している問題・エラーメッセージ
1件しか情報が取得できない状況です。
コンソール
[ { userInfo: { screenName: '', accessTokenSecret: '', uid: '', updatedAt: [Timestamp], accessTokenKey: '', createdAt: [Timestamp] }, processings: [ [Object], [Object] ] } ]
該当のソースコード
js
1const admin = require("firebase-admin"); 2const serviceAccount = require("../keys/serviceAccountKey.json"); 3const fetchProcessingsData = require("./fetchProcessingsData"); 4 5const fetchUsersData = () => { 6 if (!admin.apps.length) { 7 admin.initializeApp({ 8 credential: admin.credential.cert(serviceAccount), 9 }); 10 } 11 12 const db = admin.firestore(); 13 14 const usersData = []; 15 16 const USER = "User"; 17 18 return db 19 .collection(USER) 20 .get() 21 .then((querySnapshot) => { 22 return new Promise(async (resolve) => { 23 querySnapshot.forEach(async (doc) => { 24 const processings = await fetchProcessingsData(doc.id); 25 usersData.push({ 26 userInfo: doc.data(), 27 processings: processings, 28 }); 29 resolve(usersData); 30 }); 31 }); 32 }) 33 .catch((error) => { 34 console.error(error); 35 }); 36}; 37 38module.exports = fetchUsersData;
試したこと
プロミスを作ってpromise.allを使ってみたりしましたが、うまくいきませんでした
promise.allを使って書きました。
js
1const admin = require("firebase-admin"); 2const serviceAccount = require("../keys/serviceAccountKey.json"); 3const fetchProcessingsData = require("./fetchProcessingsData"); 4 5const fetchUsersData = () => { 6 if (!admin.apps.length) { 7 admin.initializeApp({ 8 credential: admin.credential.cert(serviceAccount), 9 }); 10 } 11 12 const db = admin.firestore(); 13 14 const usersData = []; 15 16 const USER = "User"; 17 18 const myPromise = db 19 .collection(USER) 20 .get() 21 .then((querySnapshot) => { 22 return new Promise(async () => { 23 querySnapshot.forEach(async (doc) => { 24 const processings = await fetchProcessingsData(doc.id); 25 usersData.push({ 26 userInfo: doc.data(), 27 processings: processings, 28 }); 29 }); 30 }); 31 }) 32 .catch((error) => { 33 console.error(error); 34 }); 35 36 await Promise.all(myPromise); 37 38 return usersData; 39}; 40 41module.exports = fetchUsersData; 42
補足情報(FW/ツールのバージョンなど)
firestore
javascript
node.js
あなたの回答
tips
プレビュー