2017-06-06 77 views
-1

我知道setInterval(foo, n)它每秒调用foo。 但是,我怎么能做得更快,更快?像第一次之后,该功能将在n-1秒内再次被调用,然后n-2秒,依此类推。时间延迟之后的呼叫功能,然后更快

+0

使用'setTimeout',而不是因为它激发一个单一的时间,那么你可以重新计算超时,并设置下一个。 – MrCode

回答

2

改为使用setTimeout。它将用新的超时值调用一个函数,该超时值将是前一个-x ms,依此类推。 我已经添加了停止条件,所以它不会永远运行。

function recall(n) { 
 
    console.log(n); 
 
    
 
    n -= 100; 
 
    
 
    n < 0 || setTimeout(function() { 
 
    recall(n); 
 
    }, n); 
 
} 
 

 
recall(1000);

0

在这种情况下,你可以使用setTimout递归:

function foo() { 
 
    console.log(new Date()); 
 
} 
 

 
function fasterAndFaster(fn, seconds) { 
 
    if (seconds <= 0) { return; } 
 
    setTimeout(function() { 
 
    fn(); 
 
    // Recursive call 
 
    fasterAndFaster(fn, seconds - 1); 
 
    }, seconds * 1000); 
 
} 
 

 
fasterAndFaster(foo, 5); 
 
console.log("Wait 5 seconds");

0

您可以结合使用setTimeout(foo, n)foo.bind代替,然后递归调用您的功能。

Example