2016-04-12 12 views
0

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); 
}); 
+0

“Geri aramalar” yerine 'Promises' kullanmanızı öneririm. Daha sonra, probleminizi çözen sözleri zincirleyebilirsiniz. – Matthijs

+0

'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? –

+0

@ Pierre- Önerdiğin şeyi aynısını yaptım. İyi çalıştı! – ShridharBavannawar

cevap

0

Sen getComponentsGraphData diyoruz ama isteğiniz getHbaseAllCountries erdi gibi eğer bilmiyorum. Yorumlarda önerildiği şekilde getComponentsGraphData numaralı telefonunuzu aramalısınız. Ayrıca, zincirlenmiş vaatlerin kullanılması daha iyi olurdu.

if(value["func"] === 'getHbaseAllCountries') { 
    cmodel.getHbaseAllCountries(value["options"],function(err, values) { 
     [...] 
     cmodel.getComponentsGraphData.... 
    } 
}else{ 
    cmodel.getComponentsGraphData.... 
} 
+0

Evet "getComponentGraphsData" öğesini getHbaseAllCountries'e taşıdım, işe yaradı! – ShridharBavannawar

+0

harika, lütfen cevabı kabul edin =) – Groben