저는 javascript와 node.js에 익숙하지 않아이 범위 지정 문제를 파악하는 데 많은 어려움을 겪고 있습니다. 아래의 코드는 간단한 요청을하고 콘솔에 웹 페이지 본문을 표시합니다. 문제는 없습니다.javascript scoping : 다른 함수로 전달 된 함수에서 정보를 얻으려면 어떻게해야합니까?
function makeGETRequest(host, path, headers) {
var options = {
hostname: host,
port: 8000,
path: path,
method: 'GET',
headers: headers
};
var request = http.request(options, function(response) {
response.on('data', function(body) {
console.log('Body: ' + body);
});
});
request.end();
}
내가 할 수없는 것은 http.request 내에 선언 된 함수에서 정보를 얻지 못하는 것입니다. makeGETRequest()에서 선언 한 변수에 본문을 저장 한 다음 반환하려는 경우 범위를 벗어나므로 정의되지 않습니다. 전역 변수를 생성하고이를 대신 사용하면 문제가 해결되지 않습니다.
ex.
function makeGETRequest(host, path, headers) {
var siteBody;
var options = {
hostname: host,
port: 8000,
path: path,
method: 'GET',
headers: headers
};
var request = http.request(options, function(response) {
response.on('data', function(body) {
console.log('Body: ' + body);
siteBody = body; //works as long as I don't exit the scope of the function
});
});
request.end();
return body; //returns undefined
}
은 어떻게 makeGETrequest()의 정보를 사용하고 반환 할 수 있도록 내가 정보 몸을 얻거나, 그렇지 않으면 이러한 기능 중합니까?
'var' 키워드가 없으면 변수의 전체 범위는 http://www.w3schools.com/js/js_scope.asp : Automatically Global입니다. 그러나 이것이 기능이 완료되었는지 보장하지는 않습니다. 콜백을 사용하거나 함수가 –
을 실행했는지 확인하라'get '요청이 비동기 적이기 때문에 undefined를 반환하므로'return' 문이'siteBody = body; 앞에 실제로 실행될 것입니다. – avrahamcool