Node.js循环内的http请求
我尝试定期从外部API加载一些数据,如下所示:Node.js循环内的http请求,node.js,Node.js,我尝试定期从外部API加载一些数据,如下所示: setInterval(function() { getData(); }, 60000); function getData() { if (typeof someObject.data === 'object') { for (var prop in someObject.data) { if (prop === 1 || prop === 2) { var options = {
setInterval(function() {
getData();
}, 60000);
function getData() {
if (typeof someObject.data === 'object') {
for (var prop in someObject.data) {
if (prop === 1 || prop === 2) {
var options = {
host: 'somehost.com',
path: '/somepath?param=' + prop
};
var req = http.request(options, function(res) {
// EXECUTION NEVER REACHES THIS POINT ?!?!
req.on('end', function() { alert('ended'); });
});
req.end();
}
}
}
}
如果我不做任何间隔和循环,那么对同一主机的请求就可以完美地工作。但是,如果我尝试执行如上所示的操作,那么请求永远不会调用其回调函数
我在这里做错了什么?我认为你的一个条件不好,下面的条件对我很好
var http = require('http');
setInterval(function() {
getData();
}, 1000);
function getData() {
console.log('get');
//if (typeof someObject.data === 'object') {
console.log('get 1');
//for (var prop in someObject.data) {
console.log('get 2');
//if (prop === 1 || prop === 2) {
console.log('get 3');
var options = {
host: 'google.com',
path: '/'
};
var req = http.request(options, function(res) {
console.log('http request', res.statusCode);
//req.on('end', function() {
// console.log('ended', req);
//});
});
req.end();
//}
//}
//}
}
另外,如果我是对的,您不需要('end')请求,请求的回调在完成时被调用。您还可以使用http.get
,因此不需要调用req.end
var req = http.get( options.host, function(res) {
console.log('http request', res.statusCode);
//req.on('end', function() {
// console.log('ended', req);
//});
}).on('error', function( e ) {
console.error( 'error', e );
})
请参阅中的更多信息
希望我能帮上忙。也许你的变量(someobject)不在范围内(未定义),你试过逐行调试它吗,看看是否所有的东西都定义好了吗?事实上,我也检查了someobject的类型=='object',只是为了更好的可读性,我没有把它包括在这里。它到达了发出请求的行,但从未返回。如果我去掉其他东西(setInterval和循环),一切都会完美执行。是的,似乎与环境/代码的其他部分有关。隔离测试运行良好。谢谢。你可以用一些模块简化你的代码。看看异步和请求