node.js在两个for循环内同步请求

时间:2015-04-23 15:30:49

标签: javascript node.js

我想让我的代码同步,因为如果我们发送过多请求async,谷歌会阻止。

for (var i = 0; i < titles.length; i++) {
    for (var j = 0; j < filter.length; j++) {
     (function(e,u){
    console.log(titles[e]+" - "+filter[u]);
    request('http://suggestqueries.google.com/complete/search?  client=chrome&output=json&hl=tr&q='+ titles[e] +" "+filter[u] ,{"json":true,"encoding":"binary"}, function (error, response, tags) {
        console.log(tags.toString());
     });

    }(i,j));

    }
  }

这段代码工作正常,但它是异步的,我知道如何用一个循环但两个循环我不知道。

1 个答案:

答案 0 :(得分:1)

您可以尝试将async.jseachSeries一起使用,就像这样

var requests = [];

for (var i = 0; i < titles.length; i++) {
  for (var j = 0; j < filter.length; j++) {
    requests.push({title: titles[i], filter: filter[j]});
  }
}

async.eachSeries(requests, function (req, next) {
    request('http://suggestqueries.google.com/complete/search?client=chrome&output=json&hl=tr&q=' + req.title + " " + req.filter, {
        json: true,
        encoding: 'binary'
    }, function(error, response, tags) {
        console.log(tags.toString());

        next(error);
    });
}, function () {
  console.log('done');
});
  

只有当前迭代器完成后才会调用下一个迭代器。   这意味着迭代器函数将按顺序完成。