Javascript NodeJS返回http.request
大家好,现在我知道NodeJS是异步的(老实说,我仍在努力了解这一点) 我目前面临的问题是,我试图执行Javascript NodeJS返回http.request,javascript,node.js,Javascript,Node.js,大家好,现在我知道NodeJS是异步的(老实说,我仍在努力了解这一点) 我目前面临的问题是,我试图执行http.request来接收一些JSON数据。这很好,但我需要的是将这些数据返回到一个变量。我想我需要做一个回调函数?(根据我对此事的了解) 我当前拥有的代码: var http = require('http'); pCLatLng = ''; function postCodeCheck() { var pCode = { host: 'geo.jamietho
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);
这显然是输出“未定义”;我已经尝试返回响应。在('end')上,当返回“hi”或其中的任何内容时,NodeJS输出有关站点的信息。如果有人能帮上忙,我们将不胜感激。console.log(pCLatLng)
需要位于响应的内部(或被调用的对象的内部)。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);
});
您还需要使用
postCodeCheck()
函数进行回调,就像http.request
一样。在异步世界中,使用结果调用回调与返回结果具有类似的作用。您想要这样的结果:
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); });
使用前请仔细查看差异。这实际上不会创建变量,对吗?我使用的console.log(pCLatLng)只是为了测试,但使用您的代码试图将数据返回到变量,例如“var x=postCodeCheck(function(pCLatLng){console.log(pCLatLng);}”;然后返回到console.log(x);它仍然声明未定义?这实际上不会创建变量,对吗?我使用的console.log(pCLatLng)只是为了测试,但使用您的代码试图将数据返回到变量,例如“var x=postCodeCheck(function(pCLatLng){console.log(pCLatLng);}”;然后返回到console.log(x);它仍然表示未定义?因为您仍然没有掌握异步代码。postCodeCheck
函数不返回任何内容,因此x
肯定是undefined
。postCodeCheck
函数传递一个函数(回调)这将在值可用后执行。您无法获取该回调范围之外的值。我知道我不认为我想做的是完全可能的。我想做的是创建一个带有邮政编码/地址的NodeJS模块;并返回LatLng,但它需要先转到一个变量才能触发off下一步要做的是另一个函数。(需要重新考虑这个函数,然后感谢您的帮助)。是否可能在打开之前触发结束函数?我遇到了一个问题,返回的JSON不完整:(