Javascript 是否可以使用自定义ID设置Interval,以便稍后从其他服务中清除它?
我想使用Javascript 是否可以使用自定义ID设置Interval,以便稍后从其他服务中清除它?,javascript,Javascript,我想使用setInterval方法注册一个新的间隔,该方法将一直运行,直到我停止为止。我想从另一个服务(api路由)停止它。 但问题是我没有时间间隔的ID。当记录interval对象时,我所能做的就是: let interval = setInterval(() => console.log(`Hello World`), 3000); console.log(`interval:`, interval); // we got this in the log: interval: Ti
setInterval
方法注册一个新的间隔,该方法将一直运行,直到我停止为止。我想从另一个服务(api路由)停止它。
但问题是我没有时间间隔的ID。当记录interval对象时,我所能做的就是:
let interval = setInterval(() => console.log(`Hello World`), 3000);
console.log(`interval:`, interval);
// we got this in the log:
interval: Timeout {
_called: false,
_idleTimeout: 3000,
_idlePrev: [TimersList],
_idleNext: [TimersList],
_idleStart: 2765,
_onTimeout: [Function],
_timerArgs: undefined,
_repeat: 3000,
_destroyed: false,
[Symbol(unrefed)]: false,
[Symbol(asyncId)]: 29,
[Symbol(triggerId)]: 1 }
是Node.js中间隔的“id”。(在浏览器上是一个数字,但在Node.js上是一个
Timeout
对象。)这是您传递给的内容。因此,将该对象传递给要停止间隔的另一个服务
你在评论中说:
但是我不能直接将它发送到另一个服务,该服务应该从DB或其他地方获取它。我试图将其存储在MongoDB中,但由于mongo不会存储这样的对象,所以出现了一个错误 假设其他服务处于同一进程中(否则,它无法取消计时器),您可以编写一个模块来分配计时器数字ID:
let lastId = 0;
const timers = new Map();
export function mySetInterval(callback, ms) {
const id = ++lastId;
timers.set(id, setInterval(callback, ms));
return id;
}
export function myClearInterval(id) {
const timer = timers.get(id);
if (timer) {
timers.delete(id);
clearInterval(timer);
}
}
设置间隔计时器:
import { mySetInterval } from "./my-module";
saveTimerIdInDB(mySetInterval(() => console.log(`Hello World`), 3000));
清除它:
import { myClearInterval } from "./my-module";
myClearInterval(getTimerIdFromDB());
注意:我在那里使用JavaScript标准模块语法(“ESM”)。但是你可以对Node.js的旧模块语法(“CJS”)做同样的事情,切换到
exports.mysetterval=…
和const mysetterval=require(…)
。但是我不能直接将它发送到另一个服务,该服务应该从DB或其他地方获取它。我试图将它存储在MongoDB中,但出现了一个错误,因为mongo不会存储这样的对象。@Raz-“但我不能直接将它发送到另一个服务,该服务应该从DB或其他地方提取它。”为什么?这项服务是否与调度时间间隔的代码处于同一进程中?无论如何,如果不是,则无法清除计时器。如果是,请查看我的更新。也许我可以使用cronjob来代替它?不,这不是我所要求的