2016-05-08 3 views
0
var Client = require('node-rest-client').Client; 
var client = new Client(); 
module.exports = { 
getWeatherStatus: function() { 
     var messageData = ""; 
     client.get("http://api.openweathermap.org/data/2.5/weather?q=Pune&appid=123234234234243242", function (data, response) { 
      console.log(JSON.parse(data)); 
      messageData=data; 
     }); 
     //how to set the response of that rest call to this messageData object 
     return messageData; 
    } 
} 

Cette méthode getWeatherStatus doit renvoyer la réponse de repos au format json.La fonction doit être renvoyée Reste Appel de réponse en tant qu'objet JSON. Comment définir la réponse à une variable afin qu'elle puisse être renvoyée en tant que variable

Ouvert pour une suggestion totalement différente de mettre en œuvre ce type de scénario. Mon exigence de base est d'utiliser cette réponse d'appel REST et d'envoyer à d'autres fonctions.

Répondre

0

Depuis get est fonction de rappel de sorte que vous devez mettre votre MessageData de retour au lieu de MessageData = données.

code

devrait être comme

var Client = require('node-rest-client').Client; 
var client = new Client(); 
module.exports = { 
    getWeatherStatus: function() { 
    var messageData = ""; 
    client.get("http://api.openweathermap.org/data/2.5/weather?q=Pune&appid=123234234234243242", function (data, response) { 
     return JSON.parse(data); 
    }); 

    } 
} 
+0

retourner à quoi? –

0

En getWeatherStatus vous utilisez la fonction async client.get. Vous devez attendre le résultat de la fonction async et seulement que renvoyer messageData. Pour cela, vous pouvez utiliser deasync. Exemple:

var Client = require('node-rest-client').Client; 
var client = new Client(); 
module.exports = { 
    getWeatherStatus: function() { 
    var messageData = ""; 
    client.get("http://api.openweathermap.org/data/2.5/weather?q=Pune&appid=123234234234243242", function (data, response) { 
     console.log(JSON.parse(data)); 
     messageData=data; 
    }); 
    //We waiting for data. 
    while (messageData === "") { 
     require('deasync').sleep(10); 
    } 
    return messageData; 
    } 
} 

Mais, peut-être, vous devriez revenir Promise, pas de données.

+0

Je n'arrive pas à comprendre pourquoi vous utilisez le mode veille pendant que vous utilisez la fonction de rappel. – Naqeeb

+0

voir https://www.npmjs.com/package/deasync. Il mettra en pause le processus de nœud car le sommeil est maintenant synchronisé. Cependant, je ne recommanderais jamais ce genre de choses. –

+0

Pourquoi faut-il mettre un code en pause? Alors que nous pouvons le faire en plaçant simplement notre code de traitement à l'intérieur de la fonction get get – Naqeeb

0

Je pense que vous êtes face à des difficultés à traiter avec callbacks,

Dans la méthode getWeatherStatus, au lieu de retourner le résultat, vous devez passer à une fonction de rappel une fois que le traitement est effectué.

Si vraiment vous êtes obligé de revenir, galk.in réponse semble être un moyen possible.

Sinon, vérifier,

var Client = require('node-rest-client').Client; 
var client = new Client(); 
module.exports = { 
    getWeatherStatus: function(then) { 
    var messageData = ""; 
    client.get("/some/url", function (data, response) { 
     then(err=null, JSON.parse(data)); 
    }); 
    } 
} 

Ainsi, vous pouvez appeler getWeatherStatus de telle manière,

// Somewhere else in your code 
getWeatherStatus(function fnCallback(err, jsonData) { 
    console.log(jsonData) // process data here 
}) 

Comme le suggère, la promesse sont aussi une bonne alternative. mais c'est encore asynchrone.