Estoy intentando que mi función devuelva la petición http get, sin embargo, haga lo que haga parece perderse en el "scope". Soy nuevo en Node.js así que cualquier ayuda será apreciada.
function getData(){
var http = require('http');
var str = '';
var options = {
host: 'www.random.org',
path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
};
callback = function(response) {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
});
//return str;
}
var req = http.request(options, callback).end();
// These just return undefined and empty
console.log(req.data);
console.log(str);
}
Por supuesto que sus registros devuelven undefined
: usted registra antes de que la petición se haya realizado. El problema no es el ámbito, sino la asincronía.
http.request es asíncrono, por eso toma un callback como parámetro. Haz lo que tengas que hacer en el callback (el que pasas a response.end
):
callback = function(response) {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(req.data);
console.log(str);
// your code here if you want to use the results !
});
}
var req = http.request(options, callback).end();
Esta es mi solución, aunque seguro que puedes usar un montón de módulos que te dan el objeto como una promesa o similar. De todas formas, te faltaba otro callback
function getData(callbackData){
var http = require('http');
var str = '';
var options = {
host: 'www.random.org',
path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
};
callback = function(response) {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
callbackData(str);
});
//return str;
}
var req = http.request(options, callback).end();
// These just return undefined and empty
console.log(req.data);
console.log(str);
}
en otro sitio
getData(function(data){
// YOUR CODE HERE!!!
})