[英]Callback on node.js http REST call issue
通過以下node.js調用http獲得REST API。 當我運行它時,它返回JSON結果。 但是,我試圖在分配結果后將結果發送到var r
上的console.log
。 為什么我總是變得undefined
? 看來我搞砸了javascript范圍。 任何幫助表示贊賞。
var http = require('http'),
oex_appId = 'myappId',
_hostname = 'openexchangerates.org',
_path = '/api/latest.json?app_id=' + oex_appId;
var r;
function getRates(cb) {
var options = {
hostname: _hostname,
path: _path,
method: 'GET'
};
var responseCallback = function(response) {
var latestRates = '';
var parseCurrencies = function(rates) {
var currencies = JSON.parse(rates);
currencies.rates['USD'] = 1;
return currencies.rates;
};
response.setEncoding('utf8');
response.on('data', function(chunk) {
latestRates += chunk;
}).on('error', function(err) {
throw new Error(err);
}).on('end', function() {
cb(parseCurrencies(latestRates));
});
};
var req = http.request(options, responseCallback);
req.on('error', function(e) {
throw e;
});
req.end();
};
var d = function(data) {
console.log(data["INR"]);
currencies["INR"].amount = data["INR"];
r = data;
};
getRates(d);
console.log(r);
為什么我總是不確定?
您的問題不是范圍問題,而是對異步執行的誤解。 在此代碼中,您將在賦值前打印r的值。
您的代碼執行如下:
通常,您不能期望下一行具有將通過異步回調分配的值。 相反,您應該在回調中引用該值。 在您的情況下,應將console.log(r)移動到回調函數d中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.