以下(抜粋)の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) }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。