问题在循环中构造一个 promise

Issue structuring a promise in a loop

我正在努力解决这个问题,因为我是 Promises 的新手。

我需要先阅读来自 Firebase 的 SummativeFormative,然后才能确定 StudentPlacement

下面的代码提供 null 作为 StudentPlacement snapshot.val(),因为它不等待 xy 值。

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());

        });

    }

}

谁能帮我构建触发器!?

在执行下一段代码之前,您正在等待这两个函数完成。查看 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.all 等待 xIndexRefyIndexRef 完成它们的执行。

执行后,结果将返回到可用对象中。

您可以访问结果并完成执行。