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