Probé mi javascript en el emulador local. Hay 2 acciones, si la marca de tiempo tiene más de 7 días, elimine el documento (esto funciona de maravilla <3), pero el resto es que debe verificar el "img", es una URL normal si esto devuelve 404 y luego elimine como en la primera acción , esto SOLO funciona en el emulador local, cuando lo implemento en la función de la nube ya no funciona y solo dice, por ejemplo, "La ejecución de la función tomó 7957 ms, terminó con el estado: 'ok'" PERO en local funciona como se esperaba.
exports.removeExpiredDocuments = functions.region('europe-west1').runWith({ memory: "256MB" }).pubsub.schedule("every 1 hours").onRun(async (context) => { const db = admin.firestore(); const now = firestore.Timestamp.now(); const ts = firestore.Timestamp.fromMillis(now.toMillis() - 604800000); // 168 hours in milliseconds = 604800000 const snaps = await db.collection("products").get(); let promises = []; snaps.forEach((snap) => { // functions.logger.info("forEachSnap"); if (snap.data().created_time < ts) { promises.push(snap.ref.delete()); functions.logger.info('[Time] older than 7 Days ' + snap.data().name, { structuredData: true }); } else { requesth(snap.data().img, function (error, response) { functions.logger.info('[img] error: ' + error, { structuredData: true }); if (response.statusCode == 404) { promises.push(snap.ref.delete()); functions.logger.info('[img] not found ' + snap.data().name, { structuredData: true }); } }); } }); return Promise.all(promises); });Trabajando en el emulador local (con la misma URL que en firebase) y espero que también funcione en la nube
firestore.Timestamp.now() no devuelve un valor que pueda compararse correctamente con otras marcas de tiempo con comparaciones < y >. Eso significa que esta línea de código no hace lo que piensas:
if (snap.data().created_time < ts)Si desea comparar dos objetos de marca de tiempo entre sí, debe adoptar otro enfoque. Una forma es convertirlos a milisegundos con toMillis() y comparar esos enteros entre sí. O conviértalos a Fecha y compárelos con el método de objeto apropiado.