javascript - NodeJS return http.request
Hej, nu ved jeg, at NodeJS er asynkront (hvilket jeg stadig prøver at forstå, for at være ærlig).
Problemet, som jeg i øjeblikket står overfor, er, at jeg har forsøgt at lave en http.request for at modtage nogle JSON-data. Det er fint, men det, jeg har brug for, er at returnere disse data til en variabel. Jeg tror, jeg skal bruge en callback-funktion? (ud fra hvad jeg har læst om emnet)
Koden, jeg har lige nu:
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);
Dette giver åbenlyst "undefined"; jeg har prøvet at returnere response.on('end'), når jeg har returneret "hi" eller noget som helst inden i det, men i stedet udskriver NodeJS oplysningerne om siden. Hvis nogen kan hjælpe med dette, ville det være meget værdsat.
Svar #1
console.log(pCLatLng); skal være inde i (eller inde i noget, der kaldes af) response.on('end' callbacken. Værdien er ikke tilgængelig, før den callback bliver udløst.
Prøv noget som:
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);
});
Svar #2
Du vil have noget som dette:
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); });
Se nøje efter forskellene, før du bruger.
