Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Array.length在数组上推送对象后读取0_Javascript - Fatal编程技术网

Javascript Array.length在数组上推送对象后读取0

Javascript Array.length在数组上推送对象后读取0,javascript,Javascript,我试图将对象推送到数组中,并将数组作为队列处理。当前没有从数组中删除任何内容,每次调用acme.addToValidateQueue函数(连续多次)时,它总是显示1作为数组长度。我做错了什么 var acme = {}; acme.validateQueue = []; acme.validateQueueLastIndex = 0; acme.addToValidateQueue = function(fieldData,fieldName){ var queueItem = {

我试图将对象推送到数组中,并将数组作为队列处理。当前没有从数组中删除任何内容,每次调用acme.addToValidateQueue函数(连续多次)时,它总是显示1作为数组长度。我做错了什么

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());
    }
}

每次调用
addToValidateQueue
,都会调用
processValidateQueue
,这会立即删除您刚才添加的项目:

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

这意味着在下一次通话中,您只能看到您在该通话中添加的项目。旧项已不存在。

您确定每次都没有使用新的
acme
acme.validateQueue
执行此操作吗?您不应该在方法中使用
而不是
acme
,因此,该方法使用正在被调用的实例,而不是
acme
变量?能否向我们展示对addToValidateQueue的调用?@user2357112它们在全局范围内声明为
addToValidateQueue
异步回调?