外部for循环var值未定义

时间:2017-07-21 11:49:26

标签: node.js

我正面临一个问题,在我的for循环中,它的值类似于" 179"在外面我总是不确定。为什么呢?

$(this).attr('data-value')

日志:

var countRepetidos;
if(obj.data.list!={} && obj.data.list.length>0){    
    var aux = obj.data["list"];
    countRepetidos=0;
    for(var i=0;i<aux.length;i++){                              
       Database.Probing.getMacAdress(aux[i]).then(function(data){
            if(data.count>0){
               countRepetidos++;  
               console.log("count repetidos 1",countRepetidos); // value 116
            }                                   
        });
    }
    resolve(countRepetidos);
}   

console.log("count repetidos 2",countRepetidos);    // value undefined

我尝试而不是使用resolve,使用回调但没有...我在javascript中看到了其他答案但是对于node.js我无法解决这个问题...我看到链接引用因此问题是重复但无法弄清楚这种情况的解决方案。

2 个答案:

答案 0 :(得分:0)

原因是,它是异步的。您的代码没有问题。控制台的部分在回调完成之前运行,然后进入回调。

答案 1 :(得分:0)

在您的代码中,您将在if语句中返回。因此,如果您的代码进入if范围,则它将以return resolve(countRepetidos)退出,并且永远不会到达console.log语句。如果您的代码不符合if的条件,则countRepetidos的值将不会设置,并且会打印undefined

此外,由于您的代码是异步的,您将无法resolve正确计数。要解决它,您可以执行以下操作 -

var countRepetidos;
var countPromises = []
if(obj.data.list!={} && obj.data.list.length>0){    
    var aux = obj.data["list"];
    countRepetidos=0;
    for(var i=0;i<aux.length;i++){                              
       countPromises.push(Database.Probing.getMacAdress(aux[i]).then(function(data){
            if(data.count>0){
               countRepetidos++;
               return Promise.resolve();
            }                                   
        }));
    }
    Promise.all(countPromises).then(() => {
        console.log(countRepetidos);
        resolve(countRepetidos));
    }
}