Разобрался.Я просто создал объект вне всего, что называется таймерами, и толкнул таймеры в объект, чтобы позже на него ссылались для уничтожения.Извините за столь расплывчатый характер, я фактически написал этот код в дополнение к своему собственному, чтобы показать идею того, что я сделал, не раскрывая, что я делаю / какой-либо более бизнес-логики, стоящей за ним.
Iнадеюсь, что это кому-то поможет, но я почему-то думаю, что это обстоятельство было своего рода нишей.
Если у кого-то есть лучший ответ, который увеличит производительность, я бы хотел услышать это.Это мой хак на данный момент.
let timers = {};
Actions: async (_, number, { user }) => {
try {
await requireAuth(user);
let key = user._id;
/// if >= 0, we start timer, if it's less than 0 we end the timer.
if (number >= 0) {
if (timer[key]) {
return {
/* graphql resolver return here ( since the timer already exists, we don't start it again! )*/
};
} else {
startTimer(key);
}
} else {
clearTimer(key);
}
function clearTimer(key) {
clearInterval(timers[key].timers);
delete timers[key];
return {
/* graphql resolver return here */
};
}
function startTimer(key) {
let user_timer = setInterval(doStuff, 6000);
timers[key] = { ...timers[key], user_timer };
return {
/* ... graphql resolver return here */
};
}
function doStuff() {
if (/*numberOfTimersDecreenting */) {
/* DO STUFF */
} else { // if the user is out of timed actions
clearTimer(key);
}
}
} catch (e) {
throw e;
}
};