簡體   English   中英

Node.js HTTP REST呼叫問題上的回調

[英]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的值。

您的代碼執行如下:

  1. getRates()被調用
  2. console.log(r)被調用(因此您不確定)
  3. 當在getRates中執行的請求完成時,則將執行回調。 這是當您為r分配一個值,但是到那時為止已經太晚了,因為您已經打印了它。

通常,您不能期望下一行具有將通過異步回調分配的值。 相反,您應該在回調中引用該值。 在您的情況下,應將console.log(r)移動到回調函數d中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM