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

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

开放接受完全不同的建议来实现这种场景。我的基本要求是使用这个 REST 调用响应并发送到其他函数。

4

3 回答 3

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

  }
}
于 2016-05-08T11:30:03.120 回答
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,而不是数据。

于 2016-05-08T11:32:42.010 回答
0

我认为您在处理回调时遇到了困难,

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

如果您真的需要返回,galk.in answer 似乎是一种可能的方式。

否则,看看这个,

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 也是一个不错的选择。但它仍然是异步的。

于 2016-05-08T11:51:50.817 回答