嗨,现在我知道NodeJS是异步的(我仍然试图让我理解为诚实)。
我目前面临的问题是我试图http.request
接收一些JSON数据。这很好但我需要的是将这些数据返回给变量。我相信我需要做一个回调函数? (根据我对此事的看法)
我目前的代码:
var http = require('http');
pCLatLng = '';
function postCodeCheck() {
var pCode = {
host: 'geo.jamiethompson.co.uk',
path: "/" + 'SW1A2AA' + ".json"
};
http.request(pCode).on('response', function(response) {
var data = '';
response.on("data", function (chunk) {
data += chunk;
});
response.on('end', function () {
pCJSON = JSON.parse(data);
pCLatLng = pCJSON;
});
}).end();
}
console.log(pCLatLng);
这显然是输出“未定义”;我已经尝试在返回“hi”或其中的任何内容时返回response.on('end')而不是NodeJS输出有关该站点的信息。如果有人可以提供帮助,我们将不胜感激。
答案 0 :(得分:5)
console.log(pCLatLng);
需要在response.on('end'
回调内部(或内部调用的内容)。在该回调被触发之前,该值不可用。
尝试类似:
function postCodeCheck(callback) {
var pCode = {
host: 'geo.jamiethompson.co.uk',
path: "/" + 'SW1A2AA' + ".json"
};
http.request(pCode).on('response', function(response) {
var data = '';
response.on("data", function (chunk) {
data += chunk;
});
response.on('end', function () {
callback(JSON.parse(data));
});
}).end();
}
postCodeCheck(function (pCLatLng)
{
console.log(pCLatLng);
});
答案 1 :(得分:1)
你想要这样的东西:
var http = require('http');
function postCodeCheck(cb) {
var pCode = {
host: 'geo.jamiethompson.co.uk',
path: "/" + 'SW1A2AA' + ".json"
};
http.request(pCode).on('response', function(response) {
var data = '';
response.on("data", function (chunk) {
data += chunk;
});
response.on('end', function () {
var pCJSON = JSON.parse(data);
cb(pCJSON);
});
}).end();
}
postCodeCheck(function(pCLatLng) { console.log(pCLatLng); });
使用前请仔细查看差异。
答案 2 :(得分:0)
您还需要postCodeCheck()
函数进行回调,就像http.request
一样。在异步的世界中,使用结果调用回调与return
结果具有相似的作用。