我正在编写一些调用 DuckDuckGo 的 API 的代码,使用来自 mongoDB 集合的数据构建查询字符串。我想在每次 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
)乘以索引,使每个额外的请求比前一个请求花费的时间更长。
关于javascript - setTimeout 与 mongodb 每个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710378/