2017-03-16 169 views
0

我正在努力編寫函數迭代多次的方式,並在每次迭代之間停留5秒。每次迭代都需要在下一次迭代開始前完成。在每次迭代完成後再次迭代函數

我被告知回調函數或Promise是要走的路,但我對JavaScript很新,並且在編碼時遇到了麻煩。

任何人都可以幫助我嗎?遠的不說有問題的功能被稱爲「Ineedhelp()」

感謝

+0

當你說每次迭代需要在下一次迭代開始之前完成時,你的意思是說它需要在下一次迭代的5秒定時器開始之前完成嗎? – Alesana

+0

如果'function'包含一些異步代碼,Promise將會很有用,否則Promises只會使代碼複雜 –

回答

0

還有一堆的方法可以做到這一點,但一個簡單的方法是使用的setInterval/clearInterval:

var maxIterations = 3; 
var iterations = 0; 
var msDelay = 5000; 
iNeedHelp(); 
var interval = setInterval(iNeedHelp, msDelay); 
function iNeedHelp() { 
    iterations++; 
    console.log("in iNeedHelp, iteration " + iterations); 
    if (iterations >= maxIterations) { 
     clearInterval(interval); 
    } 
} 

這將在maxIteration中設置多次iNeedHelp,並在每次調用之間暫停msDelay毫秒。

你可以找到的setInterval/clearInterval這裏一些額外的信息:https://www.w3schools.com/jsref/met_win_setinterval.asp

1

的一個好辦法做到這一點將使超時在你的函數結束。例如,如果你想讓它迭代5次,下面的代碼將起作用。

var i = 0; 
function iNeedHelp() { 
    i++; 
    alert('You\'ve been helped ' + i + ' times so far.'); 
    if (i < 5) { 
    setTimeout(function(){iNeedHelp()}, 5000); 
    } 
} 
iNeedHelp(); 
+1

或者更簡潔'setTimeout(iNeedHelp,5000);' –