Javascript 分别使用mongodb设置超时

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

我正在编写一些调用DuckDuckGo API的代码,使用mongoDB集合中的数据构造querystring。我想在每次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
)乘以索引,即可使每个附加请求比上一个请求花费更长的时间。

您可以使用,以便在每次调用之间以固定的时间延迟执行代码,而不是:


谢谢-这起作用了。为什么简单的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);
    }
});