Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS返回http.request_Javascript_Node.js - Fatal编程技术网

Javascript NodeJS返回http.request

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

大家好,现在我知道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);
这显然是输出“未定义”;我已经尝试返回响应。在('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不完整:(