timer.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. const Job = require('ee-core/jobs/baseJobClass');
  2. const Loader = require('ee-core/loader');
  3. const Log = require('ee-core/log');
  4. const Ps = require('ee-core/ps');
  5. const { childMessage } = require('ee-core/message');
  6. const Hello = Loader.requireJobsModule('./example/hello');
  7. /**
  8. * example - TimerJob
  9. * @class
  10. */
  11. class TimerJob extends Job {
  12. constructor(params) {
  13. super();
  14. this.params = params;
  15. }
  16. /**
  17. * handle()方法是必要的,且会被自动调用
  18. */
  19. async handle () {
  20. Log.info("[child-process] TimerJob params: ", this.params);
  21. // 计时器任务
  22. let eventName = 'job-timer-progress';
  23. let number = 0;
  24. let jobId = this.params.jobId;
  25. let timer = setInterval(function() {
  26. Hello.welcome();
  27. childMessage.send(eventName, {jobId, number});
  28. number++;
  29. }, 1000);
  30. // 用 setTimeout 模拟任务运行时长
  31. setTimeout(() => {
  32. // 关闭定时器
  33. clearInterval(timer);
  34. // 任务结束,重置前端显示
  35. childMessage.send(eventName, {jobId, number:0, pid:0});
  36. // 如果是childJob任务,必须调用 Ps.exit() 方法,让进程退出,否则会常驻内存
  37. // 如果是childPoolJob任务,常驻内存,等待下一个业务
  38. if (Ps.isChildJob()) {
  39. Ps.exit();
  40. }
  41. }, 10 * 1000)
  42. }
  43. }
  44. TimerJob.toString = () => '[class TimerJob]';
  45. module.exports = TimerJob;