2016-05-08 92 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 
}) 

如所建議的承諾也是一個不錯的選擇。但它仍然是異步的。