Облачная функция Firebase, которая пишет в базу данных пишет несколько раз и никогда не возвращает - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать облачную функцию для записи в базу данных Firebase.Это должно быть очень просто.Я хочу написать и вернуть 200. Пример, который они приводят, выполняет перенаправление в тогдашнем обратном вызове, но я не хочу перенаправлять.К сожалению, моя функция зависает на неопределенное время и записывает одно и то же сообщение в БД 3,4,5,6 раза.

Я почти уверен, что неправильно делаю возврат.Я попытался вернуть res.status = 200 из тогдашнего обратного вызова, но это тоже не сработало.

Это то, что у меня сейчас:

exports.createEvent = functions.https.onRequest((req, res) => {
    const name = req.query.name;
    const description = req.query.description;
    const location = req.query.location; //json? lat/lng, public,
    const date = req.query.date;

    // Push the new message into the Realtime Database using the Firebase Admin SDK.
    return admin.database().ref('/Event')
        .push({name : name, description : description, location : location, date : date});
});

1 Ответ

0 голосов
/ 25 октября 2018

Я бы посоветовал вам посмотреть официальную серию видео об облачных функциях (https://firebase.google.com/docs/functions/video-series/)) и, в частности, первое видео об обещаниях под названием «Изучите обещания JavaScript (Pt.1) с помощью HTTP-триггеров в облачных функциях».

Вы увидите, что для облачной функции HTTTS вам необходимо отправить ответ клиенту (смотрите видео в 8:50).

Поэтому следующие изменения вашегокод должен сделать трюк:

exports.createEvent = functions.https.onRequest((req, res) => {
    const name = req.query.name;
    const description = req.query.description;
    const location = req.query.location; //json? lat/lng, public,
    const date = req.query.date;

    // Push the new message into the Realtime Database using the Firebase Admin SDK.
    admin.database().ref('/Event')
        .push({name : name, description : description, location : location, date : date})
        .then(ref => {
           res.send('success');
        })
        .catch(error => {
           res.status(500).send(error);
        })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...