javascript - 在 NodeJS 中安排一个异步函数

标签 javascript node.js async-await cron

我想安排一个异步函数(async/await ruturn 类型)每两分钟运行一次。

我尝试使用通用 setInterval、 Node 模块,如 node-schedule、cron、node-cron、async-poll,但无法实现异步函数调用的轮询。

这是我在代码中尝试的:

cron.schedule("*/2 * * * *", await this.servicesManager.startPoll() => {
               console.log('running on every two minutes');
}); // this is not working breaks after first run
            
const job = schedule.scheduleJob(" */1 * * * *", async function() {
   try {
         return await this.ServicesManager.startPoll(); // this function startPoll is undefined when using this 
       } catch (e) {
         console.log(e);
   }
   console.log('Run on every minute');
});
                    
const event = schedule.scheduleJob("*/2 * * * *", this.ServicesManager.startPoll()); //using node-schedule , breaks after first time
cron.schedule("*/2 * * * *", await this.ServicesManager.startPoll()); // using cron same result as using node-schedule
return await this.ServicesManager.startPoll(); // without polling works

最佳答案

尝试这样的事情

// version 1
cron.schedule("*/2 * * * *", this.servicesManager.startPoll);

// version 2 => if servicesManager needs its `this` reference
cron.schedule("*/2 * * * *", async () => this.servicesManager.startPoll());

//version 3 ==> using node-schedule
schedule.scheduleJob("*/1 * * * *", async () => this.ServicesManager.startPoll());

我不知道你的 servicesManager,你可能必须使用上面的“版本 2”才能让它工作。

计划库需要一个函数来执行,但在上面的示例中它们得到了一个已解决的 Promise。

关于javascript - 在 NodeJS 中安排一个异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58485153/

相关文章:

javascript - 无法使用 jQuery 从外部文件加载 xml

javascript - 没有 node.js 服务器的客户端 socket.io

javascript - 游戏的每回合超时逻辑

c# - await Task.Delay 花费的时间比预期的要长

node.js - Node 中的批处理和排队 API 调用

javascript - 为什么不需要等待数据库查询的返回

javascript - 使用异步方法测试 React 组件

javascript - 如何在javascript中找到我的前六个文本输入值为零

javascript - Bootstrap 3 中的导航栏下拉菜单

node.js - 结合 Promise 和 EventEmitter