我试图让我的函数返回http get请求,但是,无论我怎么做,似乎都会在 "范围 "中丢失。我是Node.js的新手,希望能得到任何帮助。
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);
}
当然,你的日志会返回undefined
:你在请求完成之前就进行了记录。问题不在于范围,而在于同步性。
http.request
是异步的,这就是为什么它需要一个回调作为参数。在回调中做你必须做的事情(你传递给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();
这是我的解决方案,尽管你肯定可以使用很多模块,把对象作为一个承诺或类似的东西给你。总之,你缺少另一个回调
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);
}
在其他地方
getData(function(data){
// YOUR CODE HERE!!!
})