2017-06-06 79 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