質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

0回答

651閲覧

forEachの処理を待ちたいが、処理が待てません。

ryota002

総合スコア18

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

1クリップ

投稿2021/03/29 09:38

編集2021/03/29 10:56

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/03/29 09:43

> プロミスを作ってpromise.allを使ってみたりしましたが こちらはどのようなコードを書きましたか?
ryota002

2021/03/29 10:45

追記しました。 ご確認いただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問