[英]Node.js calling a callback function inside loop scope issue
我正在构建以下代码:
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));
}
如何解决?
问候,
问题可能是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]));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.