javascript调用函数10次,1秒之间

时间:2014-02-08 16:03:32

标签: javascript timing function-call

如何调用函数10次,如

for(x=0; x<10; x++) callfunction();

但每次通话之间有1秒的时间?

8 个答案:

答案 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设置为0Infinity,则会永久运行。

答案 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)

以上是我对类似问题的解决方法。