こんにちは、私はNodeJSが非同期であることを知っています(これはまだ私の頭を正直にしています)。NodeJS return http.request
私が現在直面している問題は、私が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);
これは明らかに「未定義」を出力しています。私はresponse.on( 'end')を返そうとしましたが、NodeJSはそのサイトの情報を出力します。誰かがこれを手伝うことができれば、それは非常に高く評価されるだろう。
これは実際には変数を作成しません。 console.log(pCLatLng)私はちょうどテストに使用していましたが、あなたのコードを使って 'var x = postCodeCheck(function(pCLatLng){console.log(pCLatLng);})のような変数にデータを返そうとしました。 console.log(x)に移動します。まだ未定義? –
あなたはまだ非同期コードを把握していないので。 '' postCodeCheck''関数は何も返さないので、 '' x''は確かに '' undefined''になります。 '' postCodeCheck''関数には、値が利用可能になると実行される関数(コールバック)が渡されます。あなたはそのコールバックの範囲外の値を取得することはできません。 –
私は私がしたいと思っていることがかなり可能であると思います。私がしたいことは、郵便番号/住所を取ったNodeJSモジュールを作成することでした。 LatLngを返すが、私が次にやりたいことのために別の関数を呼び出すためには、最初に変数に行く必要がある。 (あなたの助けに感謝しなければならないでしょう)。 –