Javascript 分别使用mongodb设置超时
我正在编写一些调用DuckDuckGo API的代码,使用mongoDB集合中的数据构造querystring。我想在每次API调用之前暂停几秒钟,以避免频繁地访问服务器。这是我的代码,但是,我发现在等待一秒钟后,所有API调用都会立即执行 我犯了什么错误/我如何写这封信以便每次通话之间有一秒钟的停顿Javascript 分别使用mongodb设置超时,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我正在编写一些调用DuckDuckGo API的代码,使用mongoDB集合中的数据构造querystring。我想在每次API调用之前暂停几秒钟,以避免频繁地访问服务器。这是我的代码,但是,我发现在等待一秒钟后,所有API调用都会立即执行 我犯了什么错误/我如何写这封信以便每次通话之间有一秒钟的停顿 collection.find({}).each(function(err, item) { if (item === null) { db.close(); }
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
)乘以索引,即可使每个附加请求比上一个请求花费更长的时间。您可以使用,以便在每次调用之间以固定的时间延迟执行代码,而不是:
谢谢-这起作用了。为什么简单的setTimeout不起作用?循环不应该只在超时后才迭代吗?@appa是的,但问题是集合的每个元素都有一个超时,并且所有这些元素都是大致在同一时间创建的(
。每个(…)
循环在转到下一项之前不会等待超时触发)。尝试了这个,但这不起作用-它的行为与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);
}
});