我正面临一个问题,在我的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我无法解决这个问题...我看到链接引用因此问题是重复但无法弄清楚这种情况的解决方案。
答案 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));
}
}