在给定的时间间隔内尽可能多次调用函数
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');
});
但是,函数并没有停止运行,Ended
console.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');
});
我试图在给定的时间间隔内尽可能多地调用函数 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');
});
但是,函数并没有停止运行,Ended
console.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');
});