【问题标题】:How to export a variable from a scheduled function如何从计划函数中导出变量
【发布时间】:2022-02-07 09:44:09
【问题描述】:

我有一个函数可以不断地获取输入,但之后每分钟都会使用 cron 作业处理它。

最近的输出应该存储在一个变量中,并在随机时间从外部检索。

这里是一个非常简化的形式:

let input = 'something';

let data = '';
data += input;

require('node-schedule').scheduleJob('* * * * *', somethingMore);

function somethingMore() {
let output = data += 'More';
// return output;
}

console.log(output);

在这种情况下,像上面那样在函数外部初始化变量似乎不起作用。

直接调用函数或将其分配给变量没有帮助,因为它会在到期之前运行它。

我也尝试过使用缓冲区,但它们似乎也不起作用,除非我错过了什么。

唯一可行的方法是使用 fs 将文件写入磁盘,然后从那里读取,但我想这不是最好的解决方案。

【问题讨论】:

    标签: javascript node.js cron node-schedule


    【解决方案1】:

    您似乎只是让 chron 函数按计划运行,并将最新结果保存在模块范围的变量中。然后,创建其他任何人都可以调用以获取最新结果的另一个导出函数。

    您仅显示伪代码(不是您的真实代码),因此不清楚您要保存哪些内容以供将来查询返回。您必须自己实现该部分。

    所以,如果您只想保存最新的值:

    // module-scoped variable to save recent data
    // you may want to call your function to initialize it when
    // the module loads, otherwise it may be undefined for a little bit
    // of time
    let lastData;
    
    require('node-schedule').scheduleJob('* * * * * *', () => {
         // do something that gets someData
         lastData = someData;
    });
    
    // let outside caller get the most recent data
    module.exports.getLastData = function() {
        return lastData;
    }
    

    【讨论】:

    • 这个:let lastData; / lastData = someData; !使用其他名称进行初始化,然后等同(而不是像我一样直接初始化和使用)就可以了,我的用例不需要module.exports
    • @lucian - 我不明白最后的评论。你是在问我什么吗?
    • @ jfriend00 – 不,只是为将来可能会阅读此内容的人指出,在某些情况下,仅部分解决方案可能就足够了。
    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多