4

考虑以下场景:

在我的一项 cron 工作中,我正在请求其他人的服务,该服务只允许请求 3600 秒。API 类似于GetPersonForName=string. 考虑到我的数据库中有一些people,我需要尽可能更新他们的信息,我扫描我的数据库中的所有人并调用这个 API。例子

// mongodb-in-use
People.find({}, function(error, people){
    people.forEach(function(person){
        var uri = "http://example.com/GetPersonForName=" + person.name
        request({
            uri : uri
        }, function(error, response, body){
            // do some processing here
            sleep(3600) // need to sleep after every request
        })
    })
})

不确定 sleep 是否是一种想法,但我需要在每次请求后等待 3600 秒。

4

1 回答 1

7

您可以使用setTimeout和递归函数来完成此操作:

People.find({}, function(error, people){
    var getData = function(index) {
        var person = people[index]

        var uri = "http://example.com/GetPersonForName=" + person.name
        request({
            uri : uri
        }, function(error, response, body){
            // do some processing here

            if (index + 1 < people.length) {
                setTimeout(function() {
                    getData(index + 1)
                }, 3600)
            }
        })
    }

    getData(0)
})
于 2013-10-30T20:11:38.740 回答