2017-05-05 108 views
1

所以這可能是一些誤解最好的方式來使用JavaScript提供的setTimeout方法,但即時通訊有麻煩實施它的方式是有道理的。for循環之間的JavaScript超時?

基本上我有一個數組,其數字介於1-4之間,每個數字對應一個按鈕。

for(let i = 0;i < arr.length;i++){ 
     view.renderPane(arr[i]) //All this does is set the .css 

view.renderPane是非常簡單的:(我有一個單獨的函數,用於清除(設置不透明度回到0.5),但如果可能的話,我想只是把在這裏

renderPane(pane){ 
    $("."+pane).css("opacity", "1"); 
    console.log("Activating Pane "+ pane) 
    } 

所以我試着設置一個超時時間,我可以在超時時間內調用renderPane,但是它所做的一切都是在X秒(或者幾毫秒)之後設置了一堆基本上關閉的超時。在此for循環中每隔1秒(設置一個延遲)的renderPane(pane)函數?還是我需要設置其他東西?

+0

你需要每1秒調用一次函數:你試過了間隔 –

+0

@NairAthul間隔會阻止for循環運行嗎?因爲我只需要多次調用'renderPane'函數(基於數組長度) – msmith1114

+0

yes interval會每隔1秒觸發一次(如您所提供的那樣)。你也可以在你想要的時候清除/停止定時器 –

回答

2

無需使用一個循環,只要創建一個連續的時間表本身setTimeout直到把它完成的功能 - 在這種情況下,它在每次調用數組中刪除一個項目,停止時數組爲空:

(function callee() { 
    view.renderPane(arr.shift()); 
    if (arr.length) 
     setTimeout(callee, 1000); 
})(); 

例子:https://jsfiddle.net/2fwht35d/

還有許多其他的方式來實現這一行爲,但是這應該給你一個很好的起點。