我正在构建以下代码:
for(var i=0;i<datos.length;i++){
bittrex.getticker(datos[i].Currency,function(err, data){
if (err){
console.log('ERROR:', err);
return 'ERROR:'+ err;
} else {
if (data.message!='INVALID_MARKET') {
datos[i].LasValueBTC=data.result.Last;
} else {
datos[i].LasValueBTC='';
}
}
});
}
好吧我收到一条错误消息:“无法设置未定义的属性'LasValueBTC'”。所以我猜测在变量函数中我没有理解变量。 我尝试没有成功:
for(var i=0;i<datos.length;i++){
bittrex.getticker(datos[i].Currency,(function(err, data){
if (err){
console.log('ERROR:', err);
return 'ERROR:'+ err;
} else {
if (data.message!='INVALID_MARKET') {
datos[i].LasValueBTC=data.result.Last;
} else {
datos[i].LasValueBTC='';
}
}
})(i)); //and also i tried }).bind(this,i));
}
这是如何解决的?
此致
答案 0 :(得分:0)
问题很可能getticker
是异步的,而for
循环是同步的,所以i
的值可能不是你预期的那个时候访问datos[i]
。一个简单的解决方案如下:
for(var i=0;i<datos.length;i++){
bittrex.getticker(datos[i].Currency, function(err, data){
if (err){
console.log('ERROR:', err);
return 'ERROR:'+ err;
} else {
if (data.message!='INVALID_MARKET') {
this.LasValueBTC=data.result.Last;
} else {
this.LasValueBTC='';
}
}
}.bind(datos[i]));
}