Abk*_*Abk 1 javascript node.js express node-request
我试图从通过调用第三方API获得的数据返回我正在构建的对象.我正在使用Request(https://github.com/mikeal/request)模块来完成相同的工作.
但是,我想从回调函数返回此对象.
我的请求调用是javascript函数的一部分,我希望这个外部函数能够返回新构造的对象.我遇到问题是由于node.js的非阻塞性质,每当我尝试从外部函数返回对象时,它返回一个空对象,因为回调函数尚未构造对象.
我怎样才能做到这一点?
function getData(url){
var myWeatherData = new Object();
var data;
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
data = JSON.parse(body);
myWeatherData.locationName = data.current_observation.display_location.full;
myWeatherData.weather = data.current_observation.weather;
myWeatherData.temperature_string = data.current_observation.temperature_string;
myWeatherData.relative_humidity = data.current_observation.relative_humidity;
myWeatherData.wind_string = data.current_observation.wind_string;
myWeatherData.feelslike_string = data.current_observation.feelslike_string;
}
return myWeatherData; // THIS IS A RETURN FROM CALL BACK
});
// return myWeatherDataArr; -- THIS RETURNS AN EMPTY
};
Run Code Online (Sandbox Code Playgroud)
getData在异步request函数调用回调之前完成- 你不能从尚未返回的getData东西返回.
如果您需要使用某些代码myWeatherData,请将该代码作为另一个回调传递给getData:
function getData(url, callback){
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
var myWeatherData = new Object();
myWeatherData.locationName = data.current_observation.display_location.full;
...
myWeatherData.feelslike_string = data.current_observation.feelslike_string;
callback(myWeatherData);
}
});
}
Run Code Online (Sandbox Code Playgroud)
在回答你的评论时,我只能重复我的答案的第一句话.和:
app.get('/', function(req, res){
var url = urlPrefix + myCities.state + '/' + myCities.city + '.json';
getData(url, function(aWeatherData) {
res.render('index', aWeatherData);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1458 次 |
| 最近记录: |