Tengo una función de nube cronometrada que estoy tratando de probar en el emulador de Firebase. Para hacer esto, estoy usando la solución descrita aquí ( Cómo invocar las funciones de Programación de firebase localmente usando el emulador de pubsub ) que activa la función programada usando un mensaje de Pub/Sub.
Esta solución activa con éxito la función, pero parece estar repitiendo sus llamadas más de lo esperado. Por ejemplo, cuando ejecuto el siguiente código, debería estar llamando a la función programada cada minuto: sin embargo, ejecuta el código una vez después de un minuto, luego dos veces después de 2 minutos (por lo que se ejecutó 3 veces en total), luego tres veces después 3 veces (por lo que se ejecutó 6 veces en total), y continúa aumentando sus llamadas desde allí, lo que sugiere que se está llamando a setInterval() más de una vez (tengo setInterval() en mi archivo Firebase index.js). ¿Hay alguna forma de arreglar esto? Muchísimas gracias.
const pubsub = new PubSub({ apiEndpoint: 'localhost:8085' }); setInterval(() => { const SCHEDULED_FUNCTION_TOPIC = 'firebase-schedule-yourFunctionName'; console.log(`Trigger sheduled function via PubSub topic: ${SCHEDULED_FUNCTION_TOPIC}`); const msg = await pubsub.topic(SCHEDULED_FUNCTION_TOPIC).publishJSON({ foo: 'bar', }, { attr1: 'value1' }); }, 1 * 60 * 1000); // every 1 minuteRepliqué tu caso pero no hay problema de mi parte. Aquí está mi código fuente completo:
índice.js :
const admin = require("firebase-admin"); const functions = require("firebase-functions"); const { PubSub } = require("@google-cloud/pubsub"); const pubsub = new PubSub(); admin.initializeApp(); const date_ob = new Date(); exports.pubsubScheduled = functions.pubsub.schedule("every mon 07:00").onRun((context) => { console.log("========== PUBSUB FUNCTION =========="); console.log("Time", new Date()); return true; });disparador.js :
const admin = require("firebase-admin"); const functions = require("firebase-functions"); const { PubSub } = require("@google-cloud/pubsub"); admin.initializeApp(); var date_ob = new Date(); const pubsub = new PubSub({ apiEndpoint: 'localhost:8085' // Change it to your PubSub emulator address and port }); setInterval(() => { const SCHEDULED_FUNCTION_TOPIC = 'firebase-schedule-pubsubScheduled'; console.log(`Trigger sheduled function via PubSub topic: ${SCHEDULED_FUNCTION_TOPIC} at ${new Date()}`); const msg = pubsub.topic(SCHEDULED_FUNCTION_TOPIC).publishJSON({ foo: 'bar', }, { attr1: 'value1' }); }, 1 * 60 * 1000); // every 1 minute Después de ejecutar el emulador, active el código ( trigger.js ) no hay problema y todo funciona bien, no apareció ninguna salida múltiple. Puede editar su pregunta y agregar más detalles sobre cómo podemos reproducir su problema.