1

私は約束を初めて知ったので、これを解決することに苦労しています。ループ内で約束事を構成する問題

それはxy値を待っていないとして、StudentPlacement snapshot.val()としてnull提供し、私は方法以下のコードStudentPlacement

を決定することができる前に、最初FirebaseからSummativeFormativeの両方を読み取るために必要。

exports.boxScoresUpdate = functions.database.ref('/Tests/{id}/TestScores').onWrite(event => { 

    let testScr = 0; 

    for (let i = 1; i <= section; i++) { 
     // 
     testScr += parseInt(nValue[i]); 

     var xIndex = 0; 
     var yIndex = 0; 


     admin.database().ref('TestScores').child(data.key).child('Summative').child(i).once("value").then(x => { 

      xIndex = x.val(); 

     }); 

     admin.database().ref('TestScores').child(data.key).child('Formative').child(i).once("value").then(y => { 

      yIndex = y.val(); 

     }); 

     admin.database().ref('StudentPlacement').child(data.key).child(xIndex + ":" + yIndex).once("value", snapshot => { 

      // SnapShot 
      console.log("Student Placement is: ", snapshot.val()); 

     }); 

    } 

} 

トリガーを構成するのに手伝ってもらえますか?

答えて

1

次のコードを実行する前に、両方の機能が終了するのを待っています。 Promise.allをご覧ください。

for (let i = 1; i <= section; i++) { 
    const xIndexRef = admin.database().ref('TestScores').child(data.key).child('Summative').child(i).once("value"); 
    const yIndexRef = admin.database().ref('TestScores').child(data.key).child('Formative').child(i).once("value"); 

    Promise.all([xIndexRef, yIndexRef]) 
     .then(results => { 
     const xSnapshot = results[0]; 
     const ySnapshot = results[1]; 

     return admin.database().ref('StudentPlacement').child(data.key).child(xSnapshot.val() + ":" + ySnapshot.val()).once("value"); 
     }) 
     .then(snapshot => { 
     console.log("Student Placement is: ", snapshot.val()); 
     }); 
} 

Promise.allxIndexRefyIndexRef両方を待つそれらの実行を完了します。

実行すると、結果が返されるオブジェクトに返されます。

結果にアクセスして実行を完了できます。

+0

これに助けてくれてありがとう...それはすごくうまくいって、ちょうど私が今働くことを構想したように働いています! – Learn2Code