谷歌云功能删除Firestore文档



我在本地模拟器上测试了我的javascript。有两个操作,如果时间戳超过7天,则删除文档(这就像一个魅力<3(,但另一个操作是他应该检查";img";这是一个正常的url,如果这个返回404然后像第一个动作一样删除,这只是在本地模拟器上工作,当我将其部署到云功能时,它不再工作,只是说例如";函数执行耗时7957毫秒,完成时状态为"ok";但在当地,它如预期的那样运作。

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);
});

在本地模拟器上工作(使用与firebase中相同的url(,我希望它在云上以及上工作

firestore.Timestamp.now()不会返回一个可以与<并且>比较。这意味着这行代码不会像你想的那样:

if (snap.data().created_time < ts)

如果要将两个时间戳对象相互比较,则必须采用另一种方法。一种方法是使用toMillis((将两者转换为毫秒,并将这些整数相互比较。或者将它们转换为Date,并与相应的对象方法进行比较。

最新更新