如何在GraphQL/Resolver中为每个用户创建和停止唯一计时器
我正在制作一个应用程序,它要求我给每个用户一个6秒的间隔计时器,每6秒完成一次操作。我已经有它的工作,计时器可以是唯一的功能,但主要的问题是,我不能动态取消他们,如果我调用一个不同的参数的功能。我只能通过创建一个方法来取消计时器,在该方法中,在某个倒计时时,它将清除间隔(action) 我基本上设置了这个函数,这样我就可以传递两种类型的数字。否定或肯定。以下是一个例子: 明确地说,我不能将计时器分配给的“actions”变量分配到函数之外,因为它只允许服务器运行一个计时器,而不是每个用户所需的一个计时器。我真的搞不懂如何在GraphQL/Resolver中为每个用户创建和停止唯一计时器,graphql,apollo,graphql-js,react-apollo,graphql-subscriptions,Graphql,Apollo,Graphql Js,React Apollo,Graphql Subscriptions,我正在制作一个应用程序,它要求我给每个用户一个6秒的间隔计时器,每6秒完成一次操作。我已经有它的工作,计时器可以是唯一的功能,但主要的问题是,我不能动态取消他们,如果我调用一个不同的参数的功能。我只能通过创建一个方法来取消计时器,在该方法中,在某个倒计时时,它将清除间隔(action) 我基本上设置了这个函数,这样我就可以传递两种类型的数字。否定或肯定。以下是一个例子: 明确地说,我不能将计时器分配给的“actions”变量分配到函数之外,因为它只允许服务器运行一个计时器,而不是每个用户所需的一
graphql解析器
Actions: async (_, number, {user}) => {
try {
await requireAuth(user);
if (number > 0) {
let doActions = setInterval(doStuff, 6000);
} else {
clearInterval(doActions);
}
function doStuff() {
if (userRelatedNumber > 0) {
"...actions in here"
} else {
clearInterval(doActions); //// does not work with recalling function with -1
}
}
} catch (e) {
throw e;
}
},
我明白了。我只是在所有东西之外创建了一个名为timers的对象,并将timers推入该对象中,以便稍后进行引用以进行销毁。很抱歉这么含糊,我实际上在自己的代码之外还写了这段代码,以展示我所做的事情的想法,而不透露我正在做什么/背后的任何更商业化的逻辑 我希望这能帮助一些人,但不知何故,我认为这种情况是一种利基 如果有人有更好的答案可以提高性能,我很乐意听到。这是我目前的工作
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;
}
};
没人能给我一个暗示?我完全不明白这件事。。大多数事情我都可以通过阅读或研究来解决,但这似乎。。令人困惑。