0

我在 ReactJS 上创建了一个 Todo 应用程序,并使用了一些 firebase 函数来完成后端工作。现在,使用node-schedule,我通过传递一个日期和一个回调函数来设置提醒,该函数在执行时会更新 Firebase Firestore 中的一些值。这应该只使用 repo 的基于日期的调度执行一次,但 firebase 函数执行两次一次未定义,一次成功,React 重新渲染可能导致 axios 问题,它发生而不是主要问题并且回调函数会以非常短的随机间隔多次执行。我尝试记录以了解回调的执行,它只是随机记录。这里要注意的是只有回调函数不断被执行,而不是包含schedule.scheduleJob.

此外,我尝试使用断点进行调试以了解 PHPStorm 中的流程,但由于某种原因,它什么也没做。

scheduleJob功能:

if(projectId && taskId) {
    const date = new Date(time); //Time is in 'DD/MM/YYYY hh:mm a' format
    schedule.scheduleJob(date, () => {
        console.log('reached');
        const collectionPath = type === 'INBOX' ? userPath : projectPath;
        console.log('collectionPath -> ' + collectionPath);
        console.log('Project ID -> ' + projectId);
        console.log('taskPath -> ' + taskPath);
        console.log('Task ID -> ' + taskId);
        db
            .collection(collectionPath) //taskPath is a constant
            .doc(projectId)
            .collection(taskPath) //taskPath is a constant
            .doc(taskId)
            .get().then(async (task) => {
                console.log('Printing Task Values');
                console.log(task);
                if(task.exists) {
                    //perform update operation
                }
            });
    });
    res.status(200).send('Task scheduled successfully'); //callback is never called by using end here
}

输出:( 日志甚至更长)

在此处输入图像描述

问题:回调继续执行,虽然,我已经阻止了内部 Firebase 逻辑(if(task.exists)块中)的重复执行,基于应该更新的值是否已经更新,因此,内部逻辑只执行一次。但是,看到重复执行,可能会导致 CPU 功率浪费和不必要的计费。

我需要的解决方案:一种停止回调函数的多次执行的方法,或者一种更好的基于日期的调度程序以进行一次执行。

PS:我本可以在存储库上将此作为 github 问题提交,但存储库和问题现在几个月都没有活动。

4

0 回答 0