提问者:小点点

可以在不同间隔触发的NodeJS OOP计数器


我想做一个小NodeJS应用程序,每X分钟检查一个外部网站。

首先,我只想检查一个网站,但当这工作,然后检查多个。

由于后来我想能够检查多个网站,我想创建一个类是有意义的,这样可以每n分钟检查一次example1.com,每j分钟检查一次网站b,这样每个网站对象都可以有自己的计数器?

const fetchWebsite = delay => {
  console.log('Fetch website after ' + delay + ' seconds');
}

setInterval(() => {
  setTimeout(fetchWebsite, 1000, 1);
  setTimeout(fetchWebsite, 2000, 2);
}, 1000)

这就给出了

Fetch website after 1 seconds
Fetch website after 2 seconds
Fetch website after 1 seconds
Fetch website after 2 seconds
...

这是每1秒打印一次的地方

Fetch website after 1 seconds
Fetch website after 1 seconds
Fetch website after 2 seconds
Fetch website after 1 seconds
Fetch website after 1 seconds
Fetch website after 2 seconds
...

有人能想出为什么第二个FetchWebsite每次都要打印,而不仅仅是每2秒打印一次吗?

对于如何对我的尝试进行OOP的任何帮助也将非常感激。


共1个答案

匿名用户

以1秒为间隔设置新的超时。 在您的情况下,这是错误的。
检查此代码(带计时器功能的upd.):

// Fetching function
const fetchWebsite = (delay, param) => console.log(`Fetch website ${param} after ${delay} seconds`);

// Interval creator
const runInterval = (fn, delay, param) => {
  setInterval(() => {
    // Init and run monitor
    if(!monitor[param]) monitor[param] = 1000;
    monitor[param] += delay;
    // Run function
    fn(delay, param);
  }, delay)
}

// Simple running monitor
const monitor = {};

// Run interval 1
runInterval(fetchWebsite, 1000, 1);

// Run interval 2 after 3 sec
setTimeout(() => {
  runInterval(fetchWebsite, 2000, 2);
}, 3000);

// Check monitor after 10 sec
setTimeout(() => {
  console.log(monitor)
}, 10000);

这里有一个例子