节点 – 周期内的等待请求响应

真的,我尝试了所有的方法,但是我找不到解决scheme。

由于没有英文,我正在使用谷歌翻译,我会连续多次解释相同的东西。

1º尝试For循环将等待所有内容完成

2º我试图知道,外部networking请求的城市正在行动。 就像很多城市一样,一旦我检查了第一个城市,我就需要打破这个循环。

3º我需要去一个JSON,并在运行时执行一个动作,等待它完成后。 然后随时离开周期。


我已经testing了几个代码,但为了更好的理解,在这里介绍。

--------------------------------------------------------------------- var city = [ {'city':'madrid'}, {'city':'barcelona'}, {'city':'valencia'}, {'city':'malaga'} ]; var vBreak = 0; for (i in city){ request('example.there-city.com/' + city[i].city ,function (error, response, read) { if (read == 'OK') { vBreak = 1} }); if (vBreak == 1){ break;} } 

 var city = [ {'city':'madrid'}, {'city':'barcelona'}, {'city':'valencia'}, {'city':'malaga'} ]; var vBreak = 0; for (i in city){ (function(i) { request('example.there-city.com/' + city[i].ciudad ,function (error, response, read) { if (read == 'OK') { vBreak = 1} }); })(i); if (vBreak == 1){ break;} } 

谢谢

使用async.eachSeries(如jgillich所说)按如下顺序执行每个请求:

 async.eachSeries(city, function (item, cb) { if (vbreak !== 1) { request('example.there-city.com/' + item.city ,function (error, response, read) { if (read == 'OK') { vBreak = 1} cb(); }); } else { cb() // Skip } }, function () { // we're finished }) 

您可能需要添加error handling。

尝试使用recursion函数。 只是增加计数器,在响应之后…