Nesneler dizisi olarak tanımlanan görevlerim var. getHbaseAllCountries
, tüm ülke kodlarını selectedCountries
değişkeninde depolamaya çalıştığım bir dizi olarak döndürür. Verileri almak için bu var selectedCountries []
'u getComponentsGraphData
'a geçiriyorum. Ama ben console.log(selectedCountries)
ben boş bir dizi []
verir, ancak bir geri arama ekledim.Javascript'te async yönteminden döndürülen başka bir async yöntemine nasıl değer gönderirim?
var tasks = [{
func: 'getHbaseAllCountries',
options: options
}];
var results = [];
var selectedCountries= [];
async.forEach(tasks, function(value, callback) {
if(value["func"] === 'getHbaseAllCountries') {
cmodel.getHbaseAllCountries(value["options"],function(err, values) {
if (err) {
v.send(err);
return;
}
for(var index=0; index< values.length; index++){
selectedCountries.push(values[index].key);
}
console.log(selectedCountries);// prints the desired results
callback(err,values);
});
}
console.log(selectedCountries);// prints []
cmodel.getComponentsGraphData(type, selectedCountries, value["country"], value["model"], function(err, data) {
//console.log("Data for: " + JSON.stringify(value));
results.push({
_id: value["key"],
data: data
});
callback(err, data);
});
}, function(err) {
if (err) {
v.send(err);
return;
}
v.send(results);
});
“Geri aramalar” yerine 'Promises' kullanmanızı öneririm. Daha sonra, probleminizi çözen sözleri zincirleyebilirsiniz. – Matthijs
'getHpaseAllCountries' dönüşüme' getComponentsGraphData' dönüşmesi işe yarar. Ama sanırım bunu yapmaman için bir sebebin var, değil mi? –
@ Pierre- Önerdiğin şeyi aynısını yaptım. İyi çalıştı! – ShridharBavannawar