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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1269閲覧

Firebase CloudFirestore where onSnapshot をSubcollectionに対して行なう

Mikazuchi

総合スコア1

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/08/10 03:18

以下(抜粋)のJavascriptを動かそうとしています。
システム全体は、HTML+JavascriptとPython間でデータ送受信および表示を行ないます。

HTML上のFormデータをgenerateBtn()押下時にJavascriptとPythonが受信します。
Javascriptは、Pythonのデータ処理を待ち(waitUpdate())、処理後のデータを受信・表示します(generateProfile())。

現在、waitUpdate()での動作が修正できず、質問した次第です。
エラーはありませんが、const waitUpdate = async function(user_uid) { の処理が始まると、db.collection("users")...(略)...where("generate_flag", "==", true).onSnapshot((querySnapshot) => { へ入らず、sleep(1000) 直前の console.log('Flag : ' + flag);(表示はtrue)が出続けてしまいます(無限ループ)。

CloudFirestore のアカウントからgenerate_flagを確認するとtrueになっているので、.onSnapshot((querySnapshot) => { 以下へ入れるはずだと考えていますが、実際の動作は上記の通りです。

どなたか、何かお気付きでしたら、ご教授くださりますと幸いです。
よろしくお願いします。

function generateBtn() { var user_uid = firebase.auth().currentUser.uid //console.log("In createCloze() : user_uid : " + user_uid); const waitUpdate = async function(user_uid) { let flag flag = true while(flag){ //console.log("while() in waitUpdate() : user_uid = " + user_uid); //Okay. db.collection("users").doc(user_uid).collection("logdata").where("generate_flag", "==", true) .onSnapshot((querySnapshot) => { console.log("In .onSnapshot((querySnapshot) =>");//It's never been through here so far. querySnapshot.forEach((doc) => { console.log("In querySnapshot.forEach((doc) =>"); if(doc.data().mypythonfeedback_flag == false){ flag = false; //console.log('Flag : ' + flag + ' in if(doc.data().mypythonfeedback_flag == false)'); } }); //querySnapshot.forEach((doc) => { }); //.onSnapshot((querySnapshot) => { console.log('Flag : ' + flag); sleep(1000); } //while(flag){ } //割愛 const generateProfile = async function(user_uid) { console.log('In generateProfile()'); } //const generateProfile = async function(user_uid) { const processAll = async function(user_uid) { await waitUpdate(user_uid) await generateProfile(user_uid) } processAll(user_uid) }

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

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

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

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

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

guest

回答1

0

自己解決

"return new Promise((resolve, reject) => {" を用いて解決できました。

投稿2021/08/11 05:18

Mikazuchi

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問