2014-08-29 2 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

+2

그리고'acme' 대신에'this'를 사용해서는 안되기 때문에, 메소드는'acme' 변수 대신에 호출되는 인스턴스를 사용합니까? – user2357112

+0

addToValidateQueue에 대한 호출을 표시 할 수 있습니까? –

답변

2

즉시 추가 한 항목을 제거 processValidateQueue를 호출하면 addToValidateQueue를 호출 할 때마다, :

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

다음 호출에, 당신은 단지 당신이 추가하는 항목을 볼 수 있음을 의미 그 전화. 이전 항목이 사라졌습니다.

관련 문제