2016-04-11 41 views
0

所以即时通讯完全难倒,希望有人可以帮助节点JS异步和请求模块的组合。我试图建立一个文件下载列表,我传递给异步,因为一个对象数组包含我需要下载和存储所述文件的所有信息。经过大量调试后,我发现Request甚至没有出来,我不知道为什么。节点异步和请求,异步没有等待和请求永远不会发送

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

好吧,那么...是什么让你的控制台?为什么不发送请求?没有更多的信息,这个问题就成了问题。 –

+0

obj.url(我想要请求的项目正在屏幕上),但之后没有任何东西,它只是移动到下一个obj.url。如果我更改代码来删除if语句,那么我只是打印任何和所有的响应,我会得到相同的效果。 – JeffH

+0

这个块在http请求处理程序中吗?如果是,请确保在异步任务完成后返回响应 –

回答

0

我以前遇到类似的问题。如果您在异步块外部发送响应,则在完成异步任务之前,http请求/响应周期结束。解决方法是在done()回调中发送响应。

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

我尝试了上面的结构,现在只打印了系列url中的第一个,仍然没有返回数据。 – JeffH