#firebase #scheduled-tasks #google-cloud-pubsub
#огневая база #запланированные задачи #google-cloud-pubsub
Вопрос:
Я пытался сделать что-то в этом роде:
export const refreshJob = functions.pubsub
.schedule("every 1 minutes")
.onRun(() => helloWorld());
export const helloWorld = functions.https.......
Я хотел бы запускать helloWorld
облачную функцию каждую минуту, но, похоже, не могу в этом разобраться.
Спасибо.
Ответ №1:
Похоже, вы смешиваете облачные функции на основе HTTP с запланированными облачными функциями. Они независимы друг от друга. В зависимости от функции helloWorld()
, дальнейший путь отличается.
Вызываемая функция HTTPS
Если ваша существующая функция является вызываемой функцией HTTPS, это выглядит так:
export const refreshJob = functions.pubsub
.schedule("every 1 minutes")
.onRun(() => helloWorld());
export const helloWorld = functions.https.onCall((data, context) => {
// do the task
// make sure to return a Promise
});
вы бы отредактировали ее в:
export const refreshJob = functions.pubsub
.schedule("every 1 minutes")
.onRun((context) => {
// do the task
// make sure to return a Promise
});
Если вы хотите, чтобы ваша функция была вызываемой и выполнялась по расписанию, вы могли бы вместо этого использовать:
function handleHelloWorldTask(data, context) {
// do the task
// make sure to return a Promise
}
export const refreshJob = functions.pubsub
.schedule("every 1 minutes")
.onRun((context) => handleHelloWorldTask({ scheduled: true }, context));
export const helloWorld = functions.https.onCall(handleHelloWorldTask);
Обработчик запросов HTTPS
Если ваша существующая функция является обработчиком запросов HTTPS, вы бы использовали:
const FIREBASE_PROJECT_ID = JSON.parse(process.env.FIREBASE_CONFIG).projectId;
export const refreshJob = functions.pubsub
.schedule("every 1 minutes")
.onRun(async (context) => {
const response = await fetch(`https://us-central1-${FIREBASE_PROJECT_ID}.cloudfunctions.net/helloWorld`);
if (response.ok) {
console.log('Triggered helloWorld successfully');
} else {
throw new Error(`Unexpected status code ${response.status} from helloWorld: ${await response.text()}`);
}
});
export const helloWorld = functions.https.onRequest((req, res) => {
// do the task
// make sure to call res.end(), res.send() or res.json()
});
Комментарии:
1. Отлично! Спасибо!
2. @ChrisWingler если это ответ на ваш вопрос, не забудьте отметить его как принятый ответ.