Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js—;需要睡眠_Javascript_Node.js_Request_Sleep_Wait - Fatal编程技术网

Javascript Node.js—;需要睡眠

Javascript Node.js—;需要睡眠,javascript,node.js,request,sleep,wait,Javascript,Node.js,Request,Sleep,Wait,考虑以下场景: 在我的一个cron作业中,我请求其他人的服务,该服务只允许请求3600秒。该API类似于GetPersonForName=string。考虑到我的数据库中有几个人,我需要随时更新它们的信息,我扫描我的数据库,为所有的人打电话,并调用这个API。范例 // mongodb-in-use People.find({}, function(error, people){ people.forEach(function(person){ var uri = "ht

考虑以下场景:

在我的一个cron作业中,我请求其他人的服务,该服务只允许请求3600秒。该API类似于
GetPersonForName=string
。考虑到我的数据库中有几个<代码>人<代码>,我需要随时更新它们的信息,我扫描我的数据库,为所有的人打电话,并调用这个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
        })
    })
})

我甚至不确定睡眠是否是一种理想的方法,但我需要在每次请求后等待3600秒。

您可以使用
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)
})
People.find({},函数(error,People){
var getData=函数(索引){
var person=人[索引]
var uri=”http://example.com/GetPersonForName=“+person.name
请求({
uri:uri
},函数(错误、响应、正文){
//在这里做一些处理
如果(索引+1<人长){
setTimeout(函数(){
getData(索引+1)
}, 3600)
}
})
}
getData(0)
})

为什么不使用setTimeout而不是sleep呢?您可能还想了解asyncjs()——不知怎的,我会在这个循环中为每个人使用setTimeout吗?请举个例子好吗?贴出一句话“你可以在这个模块中使用{sleep}”哦,好吧,这很有效。我只是对隐性函数中的超时有点犹豫,但这很清楚。谢谢