如何调用函数10次,如
for(x=0; x<10; x++) callfunction();
但每次通话之间有1秒的时间?
答案 0 :(得分:12)
function callNTimes(func, num, delay) {
if (!num) return;
func();
setTimeout(function() { callNTimes(func, num - 1, delay); }, delay);
}
callNTimes(callfunction, 10, 1000);
编辑:该函数基本上是说:调用传递的函数,然后稍后再执行9次。
答案 1 :(得分:8)
您可以使用setInterval以间隔重复执行,然后在10次调用后使用clearInterval:
callfunction();
var callCount = 1;
var repeater = setInterval(function () {
if (callCount < 10) {
callfunction();
callCount += 1;
} else {
clearInterval(repeater);
}
}, 1000);
已添加但是如果你不知道你的callfunction执行需要多长时间并且调用起点之间的准确时间并不重要,那么出于Paul提到的原因,最好使用setTimeout S和this article中描述的那些。
答案 2 :(得分:6)
另一种解决方案
for(var x=0; x<10; x++) window.setTimeout(callfunction, 1000 * x);
答案 3 :(得分:4)
您可以尝试使用setInterval
并使用变量来计算最多10个。试试这个:
var number = 1;
function oneSecond () {
if(number <= 10) {
// execute code here..
number++;
}
};
现在使用setInterval:
setInterval(oneSecond, 1000);
答案 4 :(得分:2)
我不知道是否有正确的名称,但我使用的是转发器:
function Repeater(callback, delay, count) {
var self = this;
this.timer = setTimeout(function() {self.run();},delay);
this.callback = callback;
this.delay = delay;
this.timesLeft = count;
this.lastCalled = new Date().getTime();
}
Repeater.prototype.run = function() {
var self = this;
this.timesLeft--;
this.callback();
this.lastCalled = new Date().getTime();
if( this.timesLeft > 0) {
this.timer = setTimeout(function() {self.run();},this.delay);
}
}
Repeater.prototype.changeDelay = function(newdelay) {
var self = this;
clearTimeout(this.timer);
this.timer = setTimeout(function() {self.run();},
newdelay-new Date().getTime()+lastcalled);
this.delay = newdelay;
}
Repeater.prototype.changeCount = function(newcount) {
var self = this;
if( this.timesLeft == 0) {
this.timer = setTimeout(function() {self.run();},this.delay);
}
this.timesLeft = newcount;
if( this.timesLeft == 0) clearTimeout(this.timer);
}
然后您可以像这样使用它:
new Repeater(callfunction, 1000, 10); // 1 second delay, 10 times
答案 5 :(得分:2)
与Amadan's answer类似,但具有不同的闭包风格,这意味着您可以重复使用而不是创建新功能
function call(fn, /* ms */ every, /* int */ times) {
var repeater = function () {
fn();
if (--times) window.setTimeout(repeater, every);
};
repeater(); // start loop
}
// use it
var i = 0;
call(function () {console.log(++i);}, 1e3, 10); // 1e3 is 1 second
// 1 to 10 gets logged over 10 seconds
在此示例中,如果您将times
设置为0
或Infinity
,则会永久运行。
答案 6 :(得分:0)
setInterval(function(){},1000);
每秒调用一次函数......
你也可以使用setTimeout来处理你的事情。
答案 7 :(得分:0)
import requests
from bs4 import BeautifulSoup
r = requests.get('https://www.marketscreener.com/MICROSOFT-CORPORATION-4835/?type_recherche=rapide&mots=MSFT')
source = BeautifulSoup(r.content,'html')
comp = source.find("td", id="zbjsfv_dr")
print(comp.text)
以上是我对类似问题的解决方法。