2013-07-22 65 views
2

在下面:如何對數組中的每個項目使用setTimeout?

ko.utils.arrayForEach(cards, function (card) { 
     setTimeout(function() { 
      observableData().saveCard(card); 
     }, 1000); 
    }); 

這是應該等待陣列中的每個卡一秒,但它只是通過陣列等待一次秒鐘,然後爆炸。我怎樣才能達到預期的行爲?

+2

它正等待陣列中每個項目一秒。您剛剛爲每個項目同時啓動了計時器。在第一個項目發生後,爲下一個項目設置一個計時器。或者,在每個回調中設置一個時間間隔和循環。 – Brad

回答

4

您需要增加超時

var idx = 1; 
ko.utils.arrayForEach(cards, function (card) { 
    setTimeout(function() { 
     observableData().saveCard(card); 
    }, (idx++) * 1000); 
}); 

由於arrayForEach並不像給項目的索引,你需要保持一個單獨的索引

+0

謝謝你,阿倫編號1 – SB2055

1
ko.utils.arrayForEach(cards, function (card) { 
    var timeout = setTimeout(function() { 
      observableData().saveCard(card); 
     }, 1000); 
     clearTimeout(timeout); 
    }); 
+0

你們三胞胎或什麼 – SB2055

+2

嘿嘿,我只是注意到它現在...這只是巧合 –

+0

hehe ......... :) –

1

嘗試

var timer; 
ko.utils.arrayForEach(cards, function (card) 
{ 
     window.clearTimeout(timer); 
     timer=window.setTimeout(function() { 
      observableData().saveCard(card); 
     }, 1000); 
    }); 
+0

這是真的 – SB2055

相關問題