我想让我的代码同步,因为如果我们发送过多请求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));
}
}
这段代码工作正常,但它是异步的,我知道如何用一个循环但两个循环我不知道。
答案 0 :(得分:1)
您可以尝试将async.js
与eachSeries
一起使用,就像这样
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');
});
只有当前迭代器完成后才会调用下一个迭代器。 这意味着迭代器函数将按顺序完成。