Javascript 如何使用geocoder获取地理位置并使用promises保存数据?
我正在建立一个Javascript 如何使用geocoder获取地理位置并使用promises保存数据?,javascript,node.js,Javascript,Node.js,我正在建立一个PUT函数来更新用户配置文件。通过这样做,我想转换地理位置坐标中的地址,以便启用地理位置搜索 我正在尝试异步执行此操作,但在使其工作时遇到了一些困难 以下是我的职能: //PUT: Update profile app.put('/api/userData', isLoggedInAjax, function(req, res){ var user = req.user; user.profile.username = req.body.us
PUT
函数来更新用户配置文件。通过这样做,我想转换地理位置坐标中的地址,以便启用地理位置搜索
我正在尝试异步执行此操作,但在使其工作时遇到了一些困难
以下是我的职能:
//PUT: Update profile
app.put('/api/userData', isLoggedInAjax, function(req, res){
var user = req.user;
user.profile.username = req.body.username;
user.profile.instrument = req.body.instrument;
user.profile.location.country = req.body.country;
user.profile.location.city = req.body.city;
user.profile.location.zip = req.body.zip;
user.geolocation = [];
var address = req.body.zip +' '+req.body.city +' '+req.body.country;
nodeGeocoder.geocode(address)
.then(function(result){
user.geolocation[0] = result[0].longitude;
user.geolocation[1] = result[0].latitude;
return user;
});
user.save(function(err){
if (err) res.send(err);
res.json({ message: 'profile udated'});
});
});
这是一个古老的“如何使用JavaScript进行异步编程”问题。您必须从回调调用save函数:
//PUT: Update profile
app.put('/api/userData', isLoggedInAjax, function(req, res){
var user = req.user;
user.profile.username = req.body.username;
user.profile.instrument = req.body.instrument;
user.profile.location.country = req.body.country;
user.profile.location.city = req.body.city;
user.profile.location.zip = req.body.zip;
user.geolocation = [];
var address = req.body.zip +' '+req.body.city +' '+req.body.country;
nodeGeocoder.geocode(address)
.then(function(result){
user.geolocation[0] = result[0].longitude;
user.geolocation[1] = result[0].latitude;
user.save(function(err){
if (err) res.send(err);
res.json({ message: 'profile udated'});
});
});
});
尝试使用console.logs或内置()或Webstorm之类的调试器仔细跟踪代码和回调。您需要仔细跟踪执行情况,因为回调和承诺的工作方式令人困惑,直到您真正习惯为止 然后,一旦您了解了代码的执行顺序,就可以使用另一个
。然后在承诺链中使用,或者将其转换为使用async/await
语法并使用babel编译来解决问题
使用async/await
是最简单、可维护/可理解的方法,但是为了利用它,您可能真的必须很好地学习回调和承诺