让Node.js请求在执行下一个请求之前等待回调

时间:2016-08-21 02:40:36

标签: javascript node.js for-loop callback request

我试图尽快提取一条信息。它可以首先在4个不同的网站上提供,所以我为每个URL创建了正则表达式,我可以找到这些信息并将这些值存储在一个数组中:

var sources = [{
    url: URL1
    regex: REGEX1
},
{
    url: URL2
    regex: REGEX2
}, etc.];

然后我用for循环遍历这些,并希望一次测试一个信息。这个for循环设置为30秒间隔,所以我希望每30秒测试一次所有网站。

for (var i = 0; i < data.sources.length; i++)
{
    var source = data.sources[i];
    var url = source.url;
    var regex = source.regex;

    // this is npm request
    request(url, function(error, response, html)
    {
        //EDIT INCLUDED HERE: HIGH-LEVEL OVERVIEW
        ->check to see if data has been updated
        ->if yes, use the capturing regex groups to enter data into MySQL table
    }
 }

问题是,因为请求是一个回调函数(或者具有回调函数?),正则表达式和url被覆盖,然后才能完成任何操作。因此请求将触发,我将获得有效的HTML,但然后将regex设置为对该URL无效的值。我需要帮助提出两种解决方案之一:

  1. (首选):将正则表达式传递给请求函数,使其成为该函数的本地函数,并且不会被写入。这将是很好的,因为它将允许所有请求以非阻塞方式。
  2. 让请求函数等到上一个请求函数完成后再继续执行for循环。

0 个答案:

没有答案