嗨,現在我知道NodeJS是異步的(我仍然試圖讓我的頭說實話)。NodeJS返回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);
這顯然是輸出「不確定」;我已經嘗試在返回「hi」或其中的任何內容時返回response.on('end'),而不是NodeJS輸出有關該站點的信息。如果任何人都可以幫助這一點,將不勝感激。
這實際上不會創建一個變量,但它會嗎? console.log(pCLatLng)我只是用來測試,但使用你的代碼試圖返回數據到一個變量,如'var x = postCodeCheck(function(pCLatLng){console.log(pCLatLng);})';然後到console.log(x);它仍然沒有定義? – 2012-02-17 18:28:24
因爲你還沒有掌握異步代碼。 ''postCodeCheck'函數不返回任何東西,所以''x''肯定會是''undefined''。 postCodeCheck函數傳遞一個函數(回調函數),一旦該值可用,該函數就會被執行。您*無法*獲得該回調範圍之外的值。 – 2012-02-17 18:59:43
我看到我不認爲我想要做的事很有可能。我想要做的是創建一個帶有郵政編碼/地址的NodeJS模塊;並返回LatLng,但它需要先去一個變量,以便爲下一步我要做的事情發射另一個函數。 (將不得不重新考慮那一個,然後感謝您的幫助)。 – 2012-02-17 19:51:08