У меня есть облачная функция, которая должна запускаться каждые 2 минуты. В настоящее время я тестирую функцию, используя Http, и пытаюсь выполнить простой запрос collectionGroup
следующим образом
Обновление 1 Я обновил свой код для обработки offset
и limit
но теперь он работает нормально для первой записи, а затем зависает при получении второй записи.
проверьте фрагмент
/* eslint-disable promise/no-nesting */
/**
* @description
* This module will send out emails to different users who have alerts not sent out yet
* @algorithm
* 1 - Get all alerts where sent = false
* 2 - Send out those alerts via the email module.
*/
const functions = require("firebase-functions");
const { db } = require("../helpers/firestore");
// console.log('admin: ', admin);
let _allUserAlerts = [];
let counter = 0;
exports.sendEmailsToUsers = functions.pubsub
.schedule("every 2 minutes")
.onRun(context => {
return sendEmailsToUsers(context);
});
exports.testSendEmailsToUsers = functions.https.onRequest((req, res) => {
return sendEmailsToUsers("hello");
});
async function sendEmailsToUsers(context) {
try {
console.log("function execution")
let alerts = await db
.collectionGroup("alerts")
.where("sent", "==", false)
.limit(1)
.offset(counter)
.get();
alerts.forEach(_alert => {
if (_alert.exists) {
console.log("alert exists")
_allUserAlerts.push(_alert.data());
counter++;
return sendEmailsToUsers()
} else {
console.log("alert ends")
sendAlertsToEmail(_allUserAlerts)
}
})
} catch (err) {
console.log(err)
}
}
async function sendAlertsToEmail(alerts) {
console.log('alerts: ', alerts);
}
Старый код
/* eslint-disable promise/no-nesting */
/**
* @description
* This module will send out emails to different users who have alerts not sent out yet
* @algorithm
* 1 - Get all alerts where sent = false
* 2 - Send out those alerts via the email module.
*/
const functions = require("firebase-functions");
const { db } = require("../helpers/firestore");
const { Email } = require("../EmailModule");
const { groupBy } = require("../helpers/groupBy");
exports.sendEmailsToUsers = functions.pubsub
.schedule("every 2 minutes")
.onRun(context => {
return sendEmailsToUsers(context);
});
async function sendEmailsToUsers(context) {
try {
console.log("function execution")
let alerts = await db
.collectionGroup("alerts")
.where("sent", "==", false)
.get();
console.log('alerts: ', alerts);
} catch (err) {
console.log(err)
}
}
Это буквально весь код функции, но время выполнения функции и я не дохожу до log()
из alerts
. Я не понимаю, в чем может быть проблема здесь? Что-нибудь, что я мог бы пропустить или не попасть сюда? Любая помощь будет оценена.
Спасибо