2016-05-08 139 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; 
    } 
} 

此方法getWeatherStatus应以json格式返回其余响应。函数需要将Rest Call响应作为JSON对象返回。如何设置对变量的响应,使其可以作为变量返回

打开完全不同的建议来实现这种情况。 我的基本要求是使用这个REST呼叫响应并发送到其他功能。

回答

0

由于get是回调函数,因此您必须将返回消息DataData 代替为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); 
    }); 

    } 
} 
+0

返回什么? –

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,而不是数据。

+0

我不明白你为什么使用睡眠,而它是回调函数。 – Naqeeb

+0

请参阅https://www.npmjs.com/package/deasync。它会暂停节点进程,因为睡眠现在是同步的。不过,我绝不会推荐这样的事情。 –

+0

为什么我们需要暂停代码?虽然我们可以通过将处理代码放入函数 – Naqeeb

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

如所建议的承诺也是一个不错的选择。但它仍然是异步的。