Nimatullah Razmjo
Nimatullah Razmjo

Reputation: 1961

How to add nested node-scheduler

Lets say I have 100,000 user records. I want to send them daily job alert at 10:00 PM using nodejs node-mailer.

If I query all of them at one time and send the active jobs, it will give Javascript heap out of memory. So I decided to follow following steps.

  1. Starting at 10:00 PM.
  2. Send email for 1000 users every 15 minutes until all all users finish.
  3. Same process every day.

So what I decided is to start nested node-scheduler. First scheduler should start at 10:00 PM and the Nested scheduler should run every 15 minutes.

  schedule.scheduleJob("*/2 * * * *", async () => {
    console.log("Parent --------every two minutes---------------------------");
    let count= 1;
    schedule.scheduleJob("*/5 * * * * *", async () => {
      console.log("Nested ------------every 5 seconds-----------------------", ++count);

    });
  });

Result of above code :

Tue, 09 Apr 2019 06:40:10 GMT  Nested ------------------- every five second---------------- 3
Tue, 09 Apr 2019 06:40:15 GMT  Nested ------------------- every five second---------------- 4
Tue, 09 Apr 2019 06:40:20 GMT  Nested ------------------- every five second---------------- 5
Tue, 09 Apr 2019 06:40:25 GMT  Nested ------------------- every five second---------------- 6
Tue, 09 Apr 2019 06:40:30 GMT  Nested ------------------- every five second---------------- 7
Tue, 09 Apr 2019 06:40:35 GMT  Nested ------------------- every five second---------------- 8
Tue, 09 Apr 2019 06:40:40 GMT  Nested ------------------- every five second---------------- 9
Tue, 09 Apr 2019 06:40:45 GMT  Nested ------------------- every five second---------------- 10
Tue, 09 Apr 2019 06:40:50 GMT  Nested ------------------- every five second---------------- 11
Tue, 09 Apr 2019 06:40:55 GMT  Nested ------------------- every five second---------------- 12
Tue, 09 Apr 2019 06:41:00 GMT  Nested ------------------- every five second---------------- 13
Tue, 09 Apr 2019 06:41:05 GMT  Nested ------------------- every five second---------------- 14
Tue, 09 Apr 2019 06:41:10 GMT  Nested ------------------- every five second---------------- 15
Tue, 09 Apr 2019 06:41:15 GMT  Nested ------------------- every five second---------------- 16
Tue, 09 Apr 2019 06:41:20 GMT  Nested ------------------- every five second---------------- 17
Tue, 09 Apr 2019 06:41:25 GMT  Nested ------------------- every five second---------------- 18
Tue, 09 Apr 2019 06:41:30 GMT  Nested ------------------- every five second---------------- 19
Tue, 09 Apr 2019 06:41:35 GMT  Nested ------------------- every five second---------------- 20
Tue, 09 Apr 2019 06:41:40 GMT  Nested ------------------- every five second---------------- 21
Tue, 09 Apr 2019 06:41:45 GMT  Nested ------------------- every five second---------------- 22
Tue, 09 Apr 2019 06:41:50 GMT  Nested ------------------- every five second---------------- 23
Tue, 09 Apr 2019 06:41:55 GMT  Nested ------------------- every five second---------------- 24
Tue, 09 Apr 2019 06:42:00 GMT  Nested ------------------- every five second---------------- 25
Tue, 09 Apr 2019 06:42:00 GMT  Parent -----------------every two minute------------------
Tue, 09 Apr 2019 06:42:05 GMT  Nested ------------------- every five second---------------- 2
Tue, 09 Apr 2019 06:42:05 GMT  Nested ------------------- every five second---------------- 26
Tue, 09 Apr 2019 06:42:10 GMT  Nested ------------------- every five second---------------- 27
Tue, 09 Apr 2019 06:42:10 GMT  Nested ------------------- every five second---------------- 3
Tue, 09 Apr 2019 06:42:15 GMT  Nested ------------------- every five second---------------- 4
Tue, 09 Apr 2019 06:42:15 GMT  Nested ------------------- every five second---------------- 28
Tue, 09 Apr 2019 06:42:20 GMT  Nested ------------------- every five second---------------- 29
Tue, 09 Apr 2019 06:42:20 GMT  Nested ------------------- every five second---------------- 5
Tue, 09 Apr 2019 06:42:25 GMT  Nested ------------------- every five second---------------- 6
Tue, 09 Apr 2019 06:42:25 GMT  Nested ------------------- every five second---------------- 30
Tue, 09 Apr 2019 06:42:30 GMT  Nested ------------------- every five second---------------- 31
Tue, 09 Apr 2019 06:42:30 GMT  Nested ------------------- every five second---------------- 7

Problem, the nested scheduler does not restart after two minutes.

Solution, the nested scheduler should restart every two minutes .

I dont know how to do it.

Any solution for this would be appreciate it.

Upvotes: 0

Views: 268

Answers (1)

Janith
Janith

Reputation: 2910

This happens since you create a new job every 15 minutes without stopping the old job. You may simply stop the old job before starting the new job.

let oldJob = null;

schedule.scheduleJob("*/2 * * * *", async () => {

    console.log("Parent --------every two minutes---------------------------");
    let count = 1;

    if (oldJob) {
        oldJob.cancel();
    }

    oldJob = schedule.scheduleJob("*/5 * * * * *", async () => {
        console.log("Nested ------------every 5 seconds-----------------------", ++count);
    });
});

Upvotes: 1

Related Questions