NestJs Cron Service

1.5k views Asked by At

I am trying to create a Schedule service using nestJs' Cron decorator

I have a Cron-decorated method below:

@Cron(CronExpression.EVERY_5_SECONDS)
  triggerDataloaderCron() {
    this.logger.debug('called every 10 seconds');
    return this.healthService.getPCFHealth();
  }

And this cron job calls a method in another service, which is shown below

getHealth() {
    //code to form up an endpoint, saved as the variable fullUrl

//Does not come into this block
    return this.httpService.get(fullUrl).pipe(
      map((axiosResponse: AxiosResponse) => {
        return axiosResponse.data;
      }),
      catchError((err) => {
        console.log("in error", err);
        throw new CustomException(ExceptionConstants.EurekaConnectionException);
      })
    );
  }

When the cron job runs, i am able to enter the getHealth() method, but the this.httpService etc... block of code does not run.

Any suggestions on how this can be achieved? Or if I am going about this the wrong way?

Thanks!

1

There are 1 answers

0
Ravi Mashru On BEST ANSWER

The getHealth method returns an Observable. An observable does not execute unless there is at least one subscriber.

In your cron method, add a subscription as follows:

this.healthService.getPCFHealth()
 .subscribe(response => console.log(response))

Since the cron method executes at regular intervals, I don't think you need to return a value from it.