2017-09-08 65 views
0

,直到我的函數結束,我不能達到我值之前,導致..我試過的回調,但它似乎沒有工作..獲取功能節點的結束

exports.helloHttp = function helloHttp (req, res) { 
    var url = "https://api.coindesk.com/v1/bpi/currentprice.json"; 
    var btcValue 
    require('https').get(url, function(res, btcValue){ 
     var body = ''; 

     res.on('data', function(chunk){ 
      body += chunk; 
     }); 

     res.on('end', function(){ 
      btcValue = JSON.parse(body); 
      callback(btcValue); 
     }); 
     }).on('error', function(e){ 
      console.log("Got an error: ", e); 
     }); 
    console.log("Got a respons ", btcValue); 
    res.setHeader('Content-Type', 'application/json'); 
    res.send(JSON.stringify({ "speech": response, "displayText": response 
    })); 
}; 

感謝很多提前

+0

'callback'在哪裏?你只是調用回調,但它在哪裏?上面的代碼應該拋出錯誤'未定義回調「 – Subburaj

回答

0

我根據你的代碼寫了一個獨立的例子:

var http = require('http'), 
    https = require('https'); 

http.createServer(function(req, res) { 
    // You can largely ignore the code above this line, it's 
    // effectively the same as yours but changed to a standalone 
    // example. The important thing is we're in a function with 
    // arguments called req and res. 
    var url = 'https://api.coindesk.com/v1/bpi/currentprice.json'; 

    var request = https.get(url, function(response) { 
     var body = ''; 

     response.on('data', function(chunk) { 
      body += chunk; 
     }); 

     response.on('end', function() { 
      // TODO: handle JSON parsing errors 
      var btcValue = JSON.parse(body); 

      res.setHeader('Content-Type', 'application/json'); 

      res.end(JSON.stringify({ 
       btcValue: btcValue 
      })); 
     }); 
    }); 

    request.on('error', function(e) { 
     console.error(e); 
    }); 

    // Runs this example on port 8000 
}).listen(8000); 

最重要的變化是移動的代碼來處理我們的響應(res)到'end'聽衆的coindesk響應。對硬幣臺的呼叫是異步的,因此我們必須等待'end'事件,然後再嘗試採取行動。

構建JSON時,引用一個名爲response的變量兩次。您的代碼沒有定義response,但我認爲它應該與撥號到coindesk的btcValue相關。我不確定你到底想要什麼,所以我只是將btcValue包裝在另一個對象中用於演示目的。

在你原來的代碼,你有這樣一行:

require('https').get(url, function(res, btcValue){ 

這第二個參數,您呼叫btcValue,不存在,因此它只會被設置爲undefined

我已將send更改爲end但這不是重大更改。我假設你使用Express(它提供了一個send方法),而我的例子不是。