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

时间:2014-10-24 17:27:50

标签: javascript json node.js for-loop asynchronous

真的,我已经尝试过所有方法,但我找不到解决方案。

由于没有英语,我正在使用谷歌翻译,我会连续多次解释同样的事情。

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

2º我试着知道这个城市在外部网络请求上做得很好。和许多城市一​​样,一旦我检查了第一个城市,我就需要打破这个循环。

3º我需要去一个json并在跑步时执行一个动作并等到它完成跟随。然后随时离开周期。


我一直在测试几个代码,但是为了更好地理解这里的代码。

---------------------------------------------------------------------

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;}
}

谢谢

2 个答案:

答案 0 :(得分:1)

使用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
})

您可能需要添加错误处理。

答案 1 :(得分:0)

尝试使用递归函数。在响应来之后,只需递增计数器......