I'm working on a fullstack project where I need a way to effectuate the following scenario:
Upon a user submit event:
- A request is posted to the backend
- When the server receives the req., it begins executing some function
- The backend should run said function on a loop/indefinitely until the backend receives a subsequent request which instructs the server to cease executing the function after the function completes its current iteration.
I know there must be a way to work this out, but I haven't been able to figure out how to condense my problem/question into something I can google search my way through.
The following will hopefully help to convey what I'm trying to accomplish:
let run_function = false;
app.post('/start', (req, res) => {
run_function = true;
while (run_function)
the_function(req.body);
}
app.get('/stop', (req, res) => {
run_function = false;
}
CodePudding user response:
Seems like a job for setInterval() / clearInterval()
let handle
// Default 200ms interval
const startLoop = (body, interval = 200) => {
clearInterval(handle) // stop any previous loops
handle = setInterval(the_function, interval, body)
}
app.post("/start", (req, res) => {
startLoop(req.body)
res.send("Started")
})
app.post("/stop", (req, res) => {
clearInterval(handle)
res.send("Stopped")
})
CodePudding user response:
let LoopInterval = null;
app.post('/start', (req, res) => {
LoopInterval = setInterval(() => {
the_function(req.body);
}, 0);
});
app.get('/stop', (req, res) => {
clearInterval(LoopInterval)
});