私は自分の関数に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!!!
})