javascript - setTimeout 与 mongodb 每个

标签 javascript node.js mongodb

我正在编写一些调用 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/

相关文章:

node.js - 如何避免 jasmine 在不同环境下出现较长的相对路径(../../../)?

java - 在 Java EE 中使用 Ajax 传递 JSON 字符串

java - 与 MongoDB 的集成测试?

javascript - 当用户在javascript中输入文本时过滤掉与顺序不匹配的单词

node.js - 更改 Jade 中的字体和颜色

javascript - 打开和关闭聊天气泡按钮的 div 弹出窗口

javascript - 为什么这个 jasmine-node 测试没有失败?

node.js - 防止并发访问 Mongoose 中的文档

javascript - Bluebird promise 收集所有结果解决或拒绝

javascript - 更新从另一个站点提取数据的 div 标签,我希望该 div 自动刷新而无需重新加载页面