前提・実現したいこと
現在、プログラミング初心者ながらunityとfirebaseを用いてオークション機能のあるゲーム作成を行なっています。
一定の制限時間内にRealtime Databaseに投票を集め、Cloud Functionsを活用し、どの投票が一番高額だったかを算出し、その結果をユーザーが取得できるような仕組みを考えています。
が、snapshotの更新タイミングがよくわからずに困っております。
制限時間に達した時に集まった投票を判定する関数をCloud Functionsで実行 ↓ highestなユーザーを決定し、書き込み ↓ ユーザーがRead権限のあるDBにも書き込み
の流れで考えていますが、snapshotの中身の更新が上手くいかず困っております。
判定前
判定後
Read可能な場所に書き込み後
![
という感じにできればと思っておりますが、snapshotの中身が上手く更新されなくて困っております。
該当のソースコード
JavaScript
1// 判定を実行 2exports.sampleJudge = functions.https.onRequest((req, res) => { 3 4 const rootRef = admin.database().ref(); 5 6 let snapshotObj; 7 let pushID; 8 let name; 9 10 // isChecked == nullのものを探す 11 rootRef.orderByChild("isChecked").once("child_added", function(snapshot){ 12 snapshotObj = snapshot; 13 pushID = snapshot.key; 14 15 // <判定してhighestのUIDを書き込み> 16 17 rootRef.child(pushID).update({"isChecked":true}); 18 return; 19 }) 20 21 // ユーザーがReadできる場所に書き込み 22 .then(function(){ 23 snapshotObj.child("highest").forEach(function(childSnapshot) { 24 25 // <書き込み処理> 26 27 }); 28 return; 29 }) 30 // エラー処理 31 .catch(error => { 32 console.log("error"); 33 }); 34});
試したこと
判定してhighestのnameを書き込んだあとに snapshotObj = snapshot
などと上書きのようなことを試みて見ましたが .then
以下では更新されておらずに snapshot.child("highest").exists() == false
になります。
once()
だと1回しかsnapshotは読み取られず更新されないのでしょうか?
よく理解していないことばかりで申し訳ありませんが、snapshotの取り扱いについてご教授いただけますとたすかります。
あなたの回答
tips
プレビュー