如何在 'while-loop' 中停止 node-cron 计划

how can i stop node-cron schedule in 'while-loop'

我想使用 node-cron 获取特定 url 的响应。

如以下示例代码所示,'scheduler' 每 10 秒向特定 url 请求一次。

但是,我希望这个动作只执行 10 次。

(可能还有其他方法,但我肯定想用node-crone的'start'和'stop'方法。)

好想用while语句。。我写的代码没有等待'start'方法的响应,结果死循环了。

我把我写的代码留在下面,所以如果你有解决方案,请回复。谢谢!!

import cron from 'node-cron';
import axios from 'axios';
import fsPromise from 'fs/promises';

let cronCnt = 0;
const cronSchedule = cron.schedule(
  '*/10 * * * * *,',
  async () => {
    try {
      const result = await axios.get(options);
      await fsPromise.writeFile(path, result.data, { encoding: 'utf-8' });
      cronCnt += 1;
    } catch (e) {
      console.error(e);
    }
  },
  {
    scheduled: false,
  },
);

(async () => {
  while (true) {
    if (cronCnt < 10) {
      await cronSchedule.start(); // i know.. 'cron.start()' doesnt'return promise... :(
    } else {
      await cronSchedule.stop(); // i know.. 'cron.stop()' doesnt'return promise... :(
      break;
    }
  }
})();

几件事:

  1. 调度 */10 * * * * *, 导致异常。您只需删除最后一个逗号即可。

  2. 看看 node-cron 代码 here in GitHub。更多内容请见下文。

在循环中调用 start() 时,您实质上是在安排要完成的工作,然后清除要在下一次调用中安排的工作,因为 start() 中的第一行清除了之前的所有工作定时器。

那么,让我们node-cron进行调度:

(() => {
  cronSchedule.start()

  while (true) {
    if (cronCnt < 10) {
      // i would sleep here for a second or something
    } else {
      cronSchedule.stop();
      break;
    }
  }
})();