2017-09-08 3 views
0

ich meinen Wert erreichen kann, bis meine Funktion beenden wird .. Ich Rückrufe versucht, aber es scheint nicht zu funktionieren ..Erhalten Sie vor dem Ende des Funktionsknoten führt

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 
    })); 
}; 

Vielen Dank im Voraus

+0

Wo ist "Rückruf" hier ?? du hast gerade callback callback aber wo ist es ?? Der obige Code sollte den Fehler "Callback ist nicht definiert" enthalten – Subburaj

Antwort

0

ich habe ein eigenständiges Beispiel geschrieben, basierend auf Ihren Code:

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); 

die wichtigste Änderung unserer Antwort den Code bewegt für den Umgang mit (res) in die 'end' Zuhörer der Coindesk-Antwort. Dieser Aufruf an coindesk ist asynchron, daher müssen wir auf das Ereignis 'end' warten, bevor wir versuchen, darauf zu reagieren.

Sie verweisen beim Erstellen Ihres JSON zweimal auf eine Variable mit dem Namen response. Ihr Code hat response nicht definiert, aber ich habe angenommen, dass es mit dem btcValue verbunden sein soll, der von dem Anruf zu coindesk zurückkommt. Ich war mir nicht sicher, was genau Sie dort wollten, also habe ich btcValue in ein anderes Objekt zu Demonstrationszwecken gewickelt.

In Ihrem ursprünglichen Code hatte Sie diese Zeile:

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

Das zweite Argument, das Sie btcValue genannt haben, nicht so werden existiert es nur auf undefined eingestellt werden.

Ich habe send zu end geändert, aber das ist keine signifikante Änderung. Ich nehme an, Sie verwenden Express (die eine send-Methode bietet), während mein Beispiel nicht ist.

Verwandte Themen