在this线程的glortho的帮助下,我构建了这段代码:
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]));
}
问题是,在回调函数之外,datos数组没有更新......正如我现在写的那样,如果我在console.log(this)里面的函数工作得很好而且this.LastValueBTC存在于我的json中,但是在函数外面,如果我在循环之后的console.log(datos),LastValueBTC不存在......我需要在循环之后做一个res.send(datos)..
答案 0 :(得分:2)
您需要做的是等待所有回调完成,然后调用res.send。
var count = datos.length;
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='';
}
count--;
if (count === 0) {
res.send(datos);
}
}
}.bind(datos[i]));
}
或使用async
async.each(datos, function(dato, next) {
bittrex.getticker(dato.Currency, function(err, data) {
if (err){
console.log('ERROR:', err);
next(err);
} else {
if (data.message!='INVALID_MARKET') {
dato.LasValueBTC = data.result.Last;
} else {
dato.LasValueBTC='';
}
next();
}
});
}, function(err) {
res.send(datos);
});
答案 1 :(得分:1)
浏览本文http://www.richardrodger.com/2011/04/21/node-js-how-to-write-a-for-loop-with-callbacks/#.VTXnFa2eDGc
它提供了一个很好的概念性概述,如果你把函数放在for循环
中会发生什么