I have a function that is triggered by an event, is there any way to wait for the completion of the entire process of this function, even if the event is triggered other times, so that only after that it continues processing the other triggers received?
As far as I understood you need some sort of a queue. You need to push events there and process them one by one. Maybe something like this:
const queue = [];
function eventHandler(event) {
queue.push(event);
if (queue.length === 1) {
doTheJob();
}
}
async function doTheJob() {
if (queue.length > 0) {
const event = queue[0]
// do the job with the "event"
await work1();
await work2();
await workN();
queue.shift();
doTheJob();
}
}
I managed to find a solution like this:
var time = 1;
// SIMULATES THE ACTIVITIES OF THE EVENT
setInterval(async () => {
await process();
}, 1000);
// THE PROCESSING THAT OCCURS WHEN THE EVENT IS TRIGGERED
async function process() {
time += 4000
const myPromise = await new Promise(async function (myResolve, myReject) {
setTimeout(async () => {
console.log(`Process executed`);
myResolve("Process completed");
}, time);
});//End myPromise
var result = await myPromise;
time = time - 4000
}