在给定的时间间隔内尽可能多次调用函数

Calling a function as many times as possible in a given time interval

我试图在给定的时间间隔内尽可能多地调用函数 test()

这里的函数应该是 运行 15 秒。

function test(): void; // Only type def

function run() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, 15000); // 15 seconds
    while (true) {
      test();
    }
  });
}

run()
  .then(() => {
    console.log('Ended');
  });

但是,函数并没有停止运行,Endedconsole.log也没有出现。 (承诺没有明显解决)。有没有办法在 Javascript 中实现这一点?

我想知道,我是否可以使用控制台计时器并将条件放在 while 语句中? (但这是最好的方法吗?)

你的函数不停止执行的原因是因为解决承诺不会停止脚本执行。你想要的是在你的 run() 方法中的某个地方存储一个标志,这样你就可以在承诺被解决后翻转标志。

请参阅下面的概念验证:我已将周期缩短为 1.5 秒并添加了一个虚拟 test() 方法,仅用于说明目的:

let i = 0;
function test() {
   console.log(`test: ${i++}`);
}

function run() {
  return new Promise(resolve => {
    let shouldInvoke = true;
    setTimeout(() => {
      shouldInvoke = false;
      resolve();
    }, 1500); // 15 seconds
    
    const timer = setInterval(() => {
      if (shouldInvoke)
        test();
      else
        window.clearInterval(timer);
    }, 0);
  });
}

run()
  .then(() => {
    console.log('Ended');
  });