2017-08-23 3 views
0

Merci d'avoir regardé le code.http get get calls nodejs

Ici, je vais chercher des données en utilisant l'analyseur de flux et en retirant des identifiants dans la variable de tableau de navcodes et je veux utiliser ces Id pour faire un appel http.Veuillez trouver le code ci-dessous.

function processNavCode(){ 
    var mfId = [53]; 
    var preTitle = ''; 
    var navCodes = []; 
    mfId.forEach(function(id){ 
     var query = "http://portal.xyz.com/Rss.aspx?mf="+id; 
     feed(query, function(err, feeds) { 
      if (err) { 
       throw err; 
      } 
      feeds.forEach(function(feed){ 
       var link = feed.link; 
       var title = feed.title; 
       var navCode = link.substr(link.length - 6); 
       if(title.split('-')[0].trim() != preTitle){ 
        preTitle = title; 
        counter ++; 
       } 
       if(parseInt(navCode) != '') 
        navCodes.push = parseInt(navCode); 
      }); 
     }); 
     async.eachSeries(navCodes,insertbulkMFValues,function(){ 
      console.log('I am done'); 
     }); 

// insertbulkMFValues(navCode); 
//Directly call insertbulkMFValues function 
    }); 
} 

J'ai aussi essayé d'appeler les insertbulkMFValues ​​directement commenté maintenant mais en raison de la nature de async nodejs, je reçois l'erreur soit « accrocher Socket up » ou « lire ECONNRESET ». J'ai vérifié et utilisé async mais pas capable de travailler avec cela aussi.

var insertbulkMFValues =function(navCode,callback){ 
    var options = { 
     host: 'www.quandl.com', 
     path: '/api/v3/datasets/AMFI/'+navCode+'.json?api_key=123456789&start_date=2013-08-30', 
     method: 'GET', 
     headers: { 
      'Content-Type': 'application/json' 
     } 
    } 
    var req1 = https.request(options, function(response) { 
     var body = ''; 
     response.setEncoding('utf8'); 
     response.on('data', function(chunk) { 
      body += chunk; 
     }); 
     response.on('end', function() { 
      if(typeof body === "string") { 
       var json = JSON.parse(body); 
      } 
      var mfData = json.dataset.data; 
      var schemeId = json.dataset.dataset_code; 
      var schemeName = json.dataset.name; 
      var isinCode = json.dataset.description; 
      var valueData=[]; 
      for (var k = 0; k < mfData.length; k++) { 
       var myDate = new Date(mfData[k][0]); 
       valueData.push({ 
        date:myDate, 
        NAV:parseFloat(mfData[k][1]).toFixed(2) 
       }); 
      } 
      var query = { "navCode": schemeId }; 
      var newData = { 
       createdDate: Date.now(), 
       navCode: schemeId, 
       schemeCode:count, 
       schemeName:schemeName, 
       ISINCode:isinCode, 
       values:valueData 
      }; 
      MHistory.findOneAndUpdate(query, newData , {upsert:true}, function(err, doc){ 
      if(err) 
       console.log('Errorr'); 
      else 
       console.log('Success'); 
     });  
    }); 
}); 
    req1.on('error', function(e) { 
     console.log('problem with request: ' + e.message); 
     callback(true); 
    }); 
    req1.end(); 
} 

Merci à l'avance .. J

Répondre

0

Vous pouvez appeler directement insertbulkMFValues pour chaque navCode comme:

if(parseInt(navCode) != '') { 
    insertbulkMFValues(navCode, function() { 
     console.log('something'} 
    }); 
} 
0

Tout ce que vous avez l'intention de le faire doit être dans le rappel de la fonction asynchrone . Une option pour vous est d'utiliser la chute d'eau ou d'une méthode parallèle de la bibliothèque async pour récupérer tous les flux pour chaque id puis appelez

async.eachSeries(navCodesAccumulated,insertbulkMFValues,function(){ 
     console.log('I am done'); 
    }); 

dans le rappel de résultat final en utilisant les codes obtenus.