Обновление или установка в Firebase Admin SDK в узле js вызывает бесконечные обратные вызовы - PullRequest
0 голосов
/ 10 мая 2018

Я получаю данные из узла из базы данных Firebase, а затем, после выполнения некоторых вычислений, обновляю их.

Я использую Firebase SDK в узле js для выполнения этой задачи.

Вот код:

app.get("/setBookedSpots", function (request, response) {
    console.log("booked spots called");

    var verifierEmail = request.query.verifierEmail;
    var toBeBookedSpot = request.query.bookSpot;

    console.log(toBeBookedSpot);

    admin.auth().getUserByEmail(verifierEmail)
        .then(function (userRecord) {
            console.log("Successfully fetched user data:", userRecord.toJSON());

            var verifierId = userRecord.uid;

            var refToUserInformation = db.ref("user/" + verifierId);

            refToUserInformation.child("Society_Name").on("value", function (snapshot) {
                console.log(snapshot.val());
                var SocietyName = snapshot.val();

                refToSocietyBookingStatus = db.ref("Societies/" + SocietyName + "/Society_Parking_Details/Society_Parking_Status");

                refToSocietyBookingStatus.child("Booked_Spots").on("value", function (snapshot) {

                    var Booked_Spots = snapshot.val();

                    console.log(Booked_Spots);
                    console.log("to be booked spot", toBeBookedSpot);

                    Booked_Spots = Booked_Spots.toString() + "," + toBeBookedSpot;

                    console.log("after booked spot", Booked_Spots);
                    refToSocietyBookingStatus.update({
                        "Booked_Spots": Booked_Spots
                    })

                    response.send({ "msg": "success" });
                })
            })
        });
});

Я получаю забронированные места и обновляю их на основе параметра запроса.

Когда я нажимаю, он переходит в бесконечный обратный вызов. Я хочу сказать, что он продолжает добавляться рекурсивно, поскольку нет цикла, который приводит к сбою.

Я попытался использовать другую переменную для ссылки на базу данных, чтобы она не вызывала родительское событие снова, но все еще оставалась та же проблема.

Вот URL вызова службы:

http://localhost:8080/setBookedSpots?verifierEmail=kemarikun@gmail.com&bookSpot=A7

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

После долгих попыток я узнал, что событие on("value") выполнялось, когда я обновлял тот же узел, из которого я только что получил значение, и, таким образом, выполнял рекурсию и продолжал вызывать по мере обновления.

Вот решение этого вопроса: заменил on("value") на once("value")

. Выполнение выполняется только один раз.

0 голосов
/ 10 мая 2018

вы можете использовать вместо response.send({ "msg": "success" });, чтобы изменить это response.send(JSON.stringify({ msg: 'success'}));

...