Firebase:Firestore 未在 Cloud Function 的计划函数中更新数据

Posted

技术标签:

【中文标题】Firebase:Firestore 未在 Cloud Function 的计划函数中更新数据【英文标题】:Firebase : Firestore not updating data in Cloud Function's scheduled function 【发布时间】:2020-11-19 17:41:45 【问题描述】:

我在这里有一个非常奇怪的经历,我预定的函数会在每个上午 12:00 更新一个文档并且它可以工作,但是文档没有任何变化。

exports.updatePrediksiData = functions.pubsub.schedule('0 0 * * *')
    .timeZone('Asia/Manila') // Users can choose timezone - default is America/Los_Angeles
    .onRun((context) => 

        //This will be run every day at 12:00 AM

        return updatePrediction()
            .catch(error => 
                return db.collection("Issues").doc(new Date().getTime().toString()).set(
                    error: error.message,
                    log: "updatePrediction failed to update prediction data."
                );
            );

    );

function updatePrediction() 

    const dateFormat = require('dateformat');

    dateFormat.i18n = 
        dayNames: [
            'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat',
            'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
        ],
        monthNames: [
            'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',
            'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'
        ],
        timeNames: [
            'a', 'p', 'am', 'pm', 'A', 'P', 'AM', 'PM'
        ]
    ;

    var genVal = getPrediksi();

    const currentDate = new Date();

    //Tuesday and Friday is not included
    if (currentDate.getDay() === 2 || currentDate.getDay() === 5)
        genVal = "----";

    return db
        .collection("Prediksi")
        .doc("Togel")
        .set(
            date: dateFormat(new Date().getTime(), "dd mmmm yyyy"),
            value: genVal
        )
        .then(result => 
            console.log("Updating prediction is success.");
            return true;
        ).catch(error => 
            console.error("Failed updating the prediction.", error);
            throw new Error(error);
        );


'value'字段的预期新数据将从星期五开始为“----”,但即使是日期也没有任何变化。

在这里你可以看到它说成功。

但是正如您所看到的,没有应用任何更改,起初我认为它与 Firebase Firestore 规则有关,但功能与未应用规则的 Admin SDK 一起使用。这里出了什么问题?我在这里使用的是 Node js 10,到目前为止,这是我第一次遇到在 Firestore 上写作的问题,而其他功能则运行良好。提前致谢。

【问题讨论】:

我不清楚这段代码应该做什么。 updatePrediction 除了分配一些从未使用过的值外,什么都不做。您对set() 的调用只是将一些字符串写入文档。 @DougStevenson 正如你所说,我调用 set() 来更改旧字段值,但 date 字段仍然是 11 月 19 日而不是 11 月 20 日,value 字段应该是现在“ ----" 因为现在是星期五。 您对 set() 的调用正在向 ID 基于日期的文档写入两个字段:“错误”和“日志”。我在这里的屏幕截图中没有看到任何内容。 @DougStevenson 请检查代码updatePrediction,然后检查屏幕截图。只需忽略错误记录,因为您可以看到没有错误并且表示成功。顺便说一句,我正在再次对其进行测试,似乎 Cloud Function 中的日期是基于美国的,因为我仍然得到 11 月 19 日的值,这在亚洲是不正确的。 您好,您能解释一下该函数是如何获取要处理的文档的吗? 【参考方案1】:

我确认这是 Date 对象的问题,我将时区更改为我的目标受众,作为像 new Date(new Date().toLocaleString("en-US", timeZone: "Asia/Jakarta" )) 这样的修复。起初我试图移动功能区域,因为我认为这样可以解决问题并移动时区,但事实并非如此。

【讨论】:

以上是关于Firebase:Firestore 未在 Cloud Function 的计划函数中更新数据的主要内容,如果未能解决你的问题,请参考以下文章

Framework7 / Firebase ( Firestore )

视图模型中的 Firestore 方法未在 SwiftUI onAppear 方法中调用

Firebase云Firebase。如何在本地模式下在项目间移动数据

Firestore 触发器未在模拟器上运行

FirebaseUI Firestore 未在 iOS 上检索数据

React setState未在firestore中执行添加文档承诺解析