2016-04-11 43 views
0

Bu yüzden tamamen şaşırdım ve birisinin Düğüm JS Async ve Request modüllerinin birleşimi konusunda yardımcı olabileceğini umuyorum. Bir dosya dizisi, söz konusu dosyayı indirmek ve depolamak için gereken tüm bilgileri içerdiğinden, Async'e aktardığım bir dosya listesini oluşturmaya çalışıyorum. Tonlarca hata ayıklamadan sonra, Talebin dışarı çıkmayı bile yapmadığını keşfettim ve nedenini anlayamıyorum.Düğüm Async ve Request, Async beklemiyor ve İstek gönderilmiyor

async.each(missingFiles, 
    function (obj, cb) { 

     console.log(obj.url); 

     //var file = nfs.createWriteStream(obj.fullPath); 
     request(obj.url, function (error, response, body) { 
      if (!error && response.statusCode == 200) { 
      console.log(response) 
      } 

     cb(); 
     }) 
    }, 
    function (err) { 

     if (err) { 
      console.log("Async failed"); 
     } 
    } 
); 
+0

Tamam, o zaman ... konsolunuza ne yapıyor? İstek neden gönderilmiyor? Daha fazla bilgi olmadan, bu soru konu dışıdır. –

+0

obj.url (istemek istediğim öğe ekrana getiriyor), ancak bundan sonra hiçbir şey yok, bir sonraki obj.url'a geçtiniz. Eğer if ifadesini kaldırmak için kodu değiştirirsem, herhangi bir ve tüm yanıtları yazdırırım ve aynı etkiyi elde ederim. – JeffH

+0

Bu blok bir http istek işleyicisi içinde mi? Varsa, yanıt verebildiğim için İstek (https://github.com/request/request) dokümanlarını izleyen async görevleri tamamlandıktan sonra yanıtın –

cevap

0

Daha önce benzer sorunlarla karşılaştım. Eşzamansız bloğun dışında yanıt gönderirseniz, http isteği/yanıt döngüsü, zaman uyumsuz görevlerinizin tamamlanmasından önce sona erer. Düzeltme, done() geriçağırımında yanıt göndermesidir.

app.post("/download", function(req, res) { 
    async.eachSeries(missingFiles, function (obj, cb) { 
    ... 
    //do your work here 
    cb() 
    }, function done() { 
    res.json({success: true}); 
    }); 
} 
+0

Yukarıdaki yapıyı denedim, şimdi sadece serideki ilk seri url'leri basılmış hala bir veri döndü. – JeffH