使用 Cron 快速返回 Node.js 中的值

Returning A Value In Node.js Express Using Cron

我已经正确安装了 Cron 和所有东西,但是我无法访问 return 从节点应用程序的其余部分中的该函数编辑的值。

基本功能:

module.exports.myFunction = function() {
    var job = new CronJob('00 0-59 * * * *', function() {
        var a = 5;
        var b = 2;

        return a + b;

        }, function () {
        },
        true
    );
}

我认为 return 在此处输入值然后使用我的一个路由文件中的承诺访问它会起作用,但它始终 returns TypeError: Cannot read property 'then' of undefined,这表示 undefined 正在从函数传递。

这是我的路线文件中的代码:

Tester.myFunction()
        .then(function(data) {
            console.log("Done!");
            console.log(data);

            req.flash('success', "You have successfully started the software!");

            res.render('dashboard');

        })
        .catch(function(err) {
            console.log(err);
        })

由于这不起作用,我如何才能在使用 Cron 时正确地 return 来自函数的值?感谢您的帮助!

您需要 return 来自 myFunctionPromise 来解析您当前 returning 的数据,如下所示:

module.exports.myFunction = function() {
    return new Promise((resolve, reject) => {
        var job = new CronJob('00 0-59 * * * *', function() {
                var a = 5;
                var b = 2;

                resolve(a + b);

            }, function() {},
            true
        );
    })
}

但是,由于 cron 可以 运行 多次,但 promise 只解析一次,您也可以使用 EventEmitter.

按如下方式更改您的 myFunction

module.exports.myFunction = function() {
    const myFnEventEmitter = new(require('events').EventEmitter)();
    var job = new CronJob('00 0-59 * * * *', function() {
            var a = 5;
            var b = 2;

            myFnEventEmitter.emit('started', a + b)

        }, function() {},
        true
    );
    return myFnEventEmitter;
}

在你使用它的地方,做:

const myFnEventEmitter = Tester.myFunction();
myFnEventEmitter.on('started', data => {
    console.log("Done!");
    console.log(data);
    req.flash('success', "You have successfully started the software!");
    res.render('dashboard');
})