gpt4 book ai didi

javascript - 从回调函数返回一个对象,以便包装函数可以在 node.js/express 中返回相同的对象

转载 作者:行者123 更新时间:2023-11-30 08:41:56 25 4
gpt4 key购买 nike

我正在尝试返回一个对象,该对象是我根据调用第三方 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
};

最佳答案

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

针对您的评论,我只能重复我回答的第一句话。并且:

app.get('/', function(req, res){ 
var url = urlPrefix + myCities.state + '/' + myCities.city + '.json';
getData(url, function(aWeatherData) {
res.render('index', aWeatherData);
});
});

关于javascript - 从回调函数返回一个对象,以便包装函数可以在 node.js/express 中返回相同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25510410/

25 4 0
文章推荐: javascript - JavaScript 执行时序中的奇怪行为
文章推荐: javascript - "identifier starts immediately after numeric literal"如何解决
文章推荐: javascript - HTML 加载不工作
文章推荐: javascript - 使用 JQuery for 循环创建
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com