NodeJS返回http.request

时间:2012-02-17 17:37:09

标签: javascript node.js

嗨,现在我知道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输出有关该站点的信息。如果有人可以提供帮助,我们将不胜感激。

3 个答案:

答案 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结果具有相似的作用。