繁体   English   中英

Node.js在循环范围内调用回调函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM