Создание облачной http-функции, которая работает бесконечно - PullRequest
0 голосов
/ 25 апреля 2019

Ответил в комментариях Крис Г: используйте вместо этого setInterval и удалите цикл while;этот код будет вызывать clearData в быстрой последовательности, бесконечно.(кстати, cronjob определенно предпочтительнее для этой настройки)

Мне нужно создать функцию http, которая будет вызываться только один раз (при запуске) и после этого будет запускаться каждые 5 минут для проверки данных, и если эти данныеЧерез 2 часа мы очищаем его.

Несколько вещей, прежде чем я покажу код:

  1. Мы знаем о планировщике Google, но предпочитаем его не использовать.
  2. Мы знаем, что можем использовать cron-jobs для вызова нашего html всякий раз, когда нам нужно, но это будет означать, что другой сервис будет работать, и моя цель - запустить саму функцию без какой-либо службы, например, вызывающей ее.

Код:

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

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

exports.methodCaller = functions.https.onRequest((request, response) => {
  setTimeout(() => {
    while (true) {
      clearData();
      console.log('methodCaller execution')
    }
  }, 30000); // currently 30 seconds for testing purposes but will be 5 hours later on
});

function dataChecked() {
  admin.database().ref('/logs/')
    .once("value")
    .then(snapshot => {
      console.log(snapshot.val());
      //code that checks data
    });
}
  1. Правильный ли мой способ определения времени ожидания функции.Я хочу, чтобы он каждые 5 минут вручную запускал проверку некоторых данных.

  2. http-запрос требует ответа, но если я помещаю его в оператор while (true), он регистрируется только 2 раза.

  3. Правильно ли мой код?

Ответы [ 2 ]

3 голосов
/ 25 апреля 2019

Мне нужно создать функцию http, которая будет вызываться только один раз (при запуске), а затем каждые 5 минут запускаться для проверки данных, и если этим данным уже 2 часа, мы очищаем их.

Для этого вы должны использовать функции расписания, которые теперь поддерживаются в Firebase. См. Сообщение в блоге Планирование облачных функций для Firebase (cron) , в котором содержится этот очень важный пример для вашего варианта использования:

export scheduledFunctionPlainEnglish =
functions.pubsub.schedule('every 5 minutes').onRun((context) => {
    console.log('This will be run every 5 minutes!');
});

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

1 голос
/ 25 апреля 2019

То, что вы хотите сделать, невозможно, максимальное время, которое вы можете установить для облачной функции в целом, составляет 540 секунд (9 минут).

У меня есть одна функция, которая имеет это как максимальное время ожидания, но обычно время ожидания составляет 60 секунд. Если вы хотите запускать что-то каждые 5 часов, просто запустите это в задании cron или настройте VPS и запустите программу там.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...