函数需要将Rest Call响应作为JSON对象返回。如何设置对变量的响应,以便它可以作为变量返回

时间:2016-05-08 11:19:15

标签: javascript node.js rest-client node-rest-client

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

此方法getWeatherStatus应以json格式返回其余响应。

打开完全不同的建议来实现这种情况。 我的基本要求是使用此REST调用响应并发送到其他函数。

3 个答案:

答案 0 :(得分:0)

因为get是回调函数所以你必须把你的返回messageData 而不是messageData = data。

代码应该像

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

  }
}

答案 1 :(得分:0)

getWeatherStatus中,您使用异步函数client.get。您需要等待来自异步函数的结果,而不仅仅是返回messageData。为此,您可以使用deasync。例如:

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

但是,也许,你应该返回Promise,而不是数据。

答案 2 :(得分:0)

我认为你在处理回调方面遇到了困难,

在方法getWeatherStatus中,您应该在处理完成后将其传递给回调函数,而不是返回结果。

如果真的要求你回来,galk.in回答似乎是一种可能的方式。

否则,请检查一下,

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

所以你可以用这种方式调用getWeatherStatus,

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

正如所建议的那样,Promise也是一个不错的选择。但它仍然是异步的。