2014-08-29 31 views
0

我試圖將對象推到數組上,並將數組作爲隊列處理。當前沒有任何數據從數組中移除,並且每次調用acme.addToValidateQueue函數(連續數次)時,它總是顯示1作爲數組長度。我究竟做錯了什麼?陣列推後的Array.length讀數爲0

var acme = {}; 
acme.validateQueue = []; 
acme.validateQueueLastIndex = 0; 

acme.addToValidateQueue = function(fieldData,fieldName){ 
    var queueItem = { 
     index : acme.validateQueueLastIndex, 
     fieldData : fieldData, 
     fieldName : fieldName 
    }; 
    acme.validateQueue.push(queueItem); 
    acme.validateQueueLastIndex++; 
    console.log(acme.validateQueue.length); // shows 1 everytime the queue is called. 
    if(acme.validateQueue.length === 1){ 
     acme.processValidateQueue(); 
    }; 
} 

acme.processValidateQueue = function(){ 
    if(acme.validateQueue.length){ 
     acme.validate_field(acme.validateQueue.shift()); 
    } 
} 
+0

你確定你每次都不用這個新的'acme'和'acme.validateQueue'嗎? – user2357112 2014-08-29 22:19:15

+2

你不應該在方法中使用'this'而不是'acme',所以該方法使用它被調用的實例而不是'acme'變量? – user2357112 2014-08-29 22:20:26

+0

你可以告訴我們addToValidateQueue的調用嗎? – 2014-08-29 22:23:55

回答

2

每次你打電話addToValidateQueue,調用processValidateQueue,其及時刪除您剛纔添加的項目:這意味着,在接下來的通話,則只能看到您要添加的項目

acme.validate_field(acme.validateQueue.shift()); 
//       Right here^

在那個電話。舊物品消失了。