Asynchronously stopping a loop from outside node.js

I am using node.js 14 and currently have a loop that is made by a recursive function and a setTimeout, something like this:

this.timer = null;

async recursiveLoop() {
   //Do Stuff
   this.timer = setTimeout(this.recursiveLoop.bind(this), rerun_time);
}

But sometimes this loop gets stuck and I want it to automatically notice it, clean up and restart. So I tried doing something like this:

this.timer = null;

async recursiveLoop() {
   this.long_timer = setTimeout(() => throw new Error('Taking too long!'), tooLong);
   //Do Stuff
   this.timer = setTimeout(this.recursiveLoop.bind(this), rerun_time);
}

main() {
  //Do other asynchronous stuff
  recursiveLoop()
    .then()
    .catch((e) => {
       console.log(e.message);
       cleanUp();
       recursiveLoop();
    }
}

I can’t quite debug where it gets stuck, because it seems quite random and the program runs on a virtual machine. I still couldn’t reproduce it locally.

This makeshift solution, instead of working, keeps crashing the whole node.js aplication, and now I am the one stuck. I have the constraint of working with node.js 14, without using microservices, and I never used child process before. I am a complete beginner. Please help me!