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调用响应并发送到其他函数。
答案 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也是一个不错的选择。但它仍然是异步的。