首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-schedule作业在函数中不工作

node-schedule作业在函数中不工作
EN

Stack Overflow用户
提问于 2018-08-14 17:59:20
回答 3查看 2.5K关注 0票数 1

我正在尝试使用node-schedule。我想创建一个动态调度程序。我想为日程安排动态设置规则。当根据github上的文档调用它时,它工作正常。但是当我通过循环在函数中使用它时,它就不起作用了。我的代码如下所示。在代码中,出于安全目的,smtp电子邮件地址已被修改。

代码语言:javascript
复制
con.connect(function (err) {
    if (err) throw err;
    con.query("SELECT * FROM customers", function (err, result, fields) {
        if (err) throw err;
        for (var i = 0, len = result.length; i < len; i++) {
           var dt = dateTime.create(result[i].expire_date);
           var formattedDate = dt.format('Y-m-d');
           if (result[i].payment_status === 0) {
               var dt_str = formattedDate.split('-');
               var dt_year = parseInt(dt_str[0]);
               var dt_month = parseInt(dt_str[1]);
               var dt_date = parseInt(dt_str[2]);

               var mail_to = result[i].email, mail_sub='Schedule Of Maintenance', mail_message='Test Mail message Status';
               console.log('ScheduleCron Function calling');

               scheduleCron(dt_date,dt_month, dt_year, mail_to, mail_sub, mail_message);
           } else {
               console.log(result[i].payment_status);
           }
        }
    });
});

function scheduleCron(schedule_date,schedule_month,schedule_year,mail_to,mail_sub,mail_message) {

console.log(schedule_date+'  '+schedule_month+'  '+schedule_year);
console.log('ScheduleCron Function In');

var date = new Date(schedule_year, schedule_month, schedule_date, 13, 33, 0);
schedule.scheduleJob(date, function(){
    sendEmail( mail_to, mail_sub, mail_message);
    });
}


function sendEmail(mail_to,mail_sub,mail_message) {
   var mailOptions = {
      from: "email@gmail.com",
      to: mail_to,
      subject: mail_sub,
      text: mail_message

   };
   transporter.sendMail(mailOptions, function (error, info) {
       if (error) {
        throw error;
       } else {
        console.log("Email successfully sent!");
      }
   });
}
EN

回答 3

Stack Overflow用户

发布于 2018-08-15 02:21:28

您需要创建作业对象,如documentation https://www.npmjs.com/package/node-schedule中所示

代码语言:javascript
复制
const job = schedule.scheduleJob(date, function(){
    sendEmail( mail_to, mail_sub, mail_message);
    });
}
票数 2
EN

Stack Overflow用户

发布于 2018-08-15 19:56:18

您缺少调度算法所需的作业对象。从文档中

作业和调度

Node Schedule中的每个计划作业都由一个job对象表示。您可以手动创建作业,然后执行schedule()方法来应用调度,或者使用方便的函数scheduleJob(),如下所示。

票数 1
EN

Stack Overflow用户

发布于 2021-01-29 04:55:59

我也被这个搞糊涂了。我不明白为什么这不起作用,我的意思是"myFunc()“是一个函数。对吗?因此,您将myFunc()抛入scheduleJob()的第二个参数:

代码语言:javascript
复制
function myFunc(){
    console.log("stuff");
    do.otherStuff();
}

schedule.scheduleJob('*/10 * * * *', myFunc());

但出于某种奇怪的原因,它必须这样命名:

代码语言:javascript
复制
function myFunc(){
    console.log("stuff");
    do.otherStuff();
}

schedule.scheduleJob('*/10 * * * *', function(){
    myFunc();
});

以避免在执行时出现TypeError: this.job.execute is not a function错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51838767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档