【问题标题】:Node.js — Sleep requiredNode.js — 需要睡眠
【发布时间】:2013-11-10 15:38:17
【问题描述】:

考虑以下场景:

在我的一项 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 秒。

【问题讨论】:

标签: javascript node.js request sleep wait


【解决方案1】:

您可以使用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)
})

【讨论】:

  • 哦,那行得通。我只是对隐性函数内部的超时有点犹豫,但这很干净。谢谢!
猜你喜欢
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多