Как прочитать значение из Realtime Databse с помощью облачных функций? - PullRequest
2 голосов
/ 22 июня 2019

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

Я искал в Интернете и нашел одно решение. Это сработало: функция сработала, как только значение в /ID/temp_id изменилось, но потребовалось еще 5 секунд, чтобы прочитать значение в /ID/I.

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.getID = functions.database.ref("/ID/temp_id").onUpdate((change, context)=>{   //triggers the function when value "temp_id" changes
  const tempID = change.after.val();

  const i_snap = admin.database().ref("/ID/i").once("value", function(snapshot){      //read the value at "/ID/i" from the databse
    const i = snapshot.val();
  })

})

Есть ли способ прочитать значение на /ID/I быстрее?

Ответы [ 2 ]

1 голос
/ 23 июня 2019

В общем, вы не можете просто ускорить простую запись в базу данных.Имейте в виду, что облачные функции имеют неизбежный холодный запуск время для первого вызова вашей функции на новом экземпляре сервера.

Я бы вообще не ожидал, что ваша функция будет работать вообще, потому что вы 'не возвращать обещание, которое разрешается, когда вся асинхронная работа завершена в вашей функции.Вы обязаны сделать это так, чтобы ваша функция обычно завершалась .

0 голосов
/ 22 июня 2019

Вы должны вызвать функцию через HTTP-запрос, используя functions.https.Это позволяет вызвать синхронную функцию.Используйте functions.https, чтобы создать функцию, которая обрабатывает события HTTP.Обработчик события для функции HTTP прослушивает событие onRequest().Используемый в качестве аргументов для onRequest(), объект Request дает вам доступ к свойствам HTTP-запроса, отправленного клиентом, а объект Response дает вам возможность отправить ответ обратно клиенту.

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

Более подробная документация: https://firebase.google.com/docs/functions/http-events

Взгляните на пример ниже:

var functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

//Call function via HTTP requests. This allows invoke a synchronous function 
exports.showValue = functions.https.onRequest((req, res) => {
    const params = req.url.split("/");
    const tempId = params[2];
    return admin.database().ref('ID/' + tempId).once('value', (snapshot) => {
        var value = snapshot.val();
        res.send(`
            <!doctype html>
            <html>
                <head>
                    <title>${value.name}</title>
                </head>
                <body>
                    <h1>Title ${value. name}, id ${value.id}</h1>
                </body>
            </html>`
        );
     });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...