setTimeout每个与MongoDB
我正在编写一些调用DuckDuckGo API的代码,使用mongoDB集合中的数据构build查询string。 我想在每次API调用之前暂停几秒钟,以免频繁地碰到服务器。 这是我的代码,但是,我发现等待一秒钟后,所有的API调用立即进行。
我做了什么错误/我怎么写这个,以便在每次通话之间有一秒停顿?
collection.find({}).each(function(err, item) { if (item === null) { db.close(); } else { setTimeout(function() { var req = http.request({ host: 'api.duckduckgo.com', path: '/?q=' + item.letters + '&format=json&pretty=1' }, callback).end(); }, 1000); } });
怎么样这样的事情:
var i = 1; collection.find({}).each(function(err, item) { if (item === null) { db.close(); } else { setTimeout(function() { var req = http.request({ host: 'api.duckduckgo.com', path: '/?q=' + item.letters + '&format=json&pretty=1' }, callback).end(); }, 1000*i); i++; } });
这里, i
代表请求的索引。 您只需将等待时间(本例中为1000
)乘以索引,以使每个附加请求比上一个请求花费的时间更长。
你可以使用setInterval来执行你的代码,在每次调用之间使用固定的时间延迟而不是setTimeout ,如下所示:
collection.find({}).each(function(err, item) { if (item === null) { db.close(); } else { setInterval(function() { var req = http.request({ host: 'api.duckduckgo.com', path: '/?q=' + item.letters + '&format=json&pretty=1' }, callback).end(); }, 1000); } });