我正尝试在Parse Cloud的beforeSave事件中使用Google Maps API进行地理定位。问题是在进程之间没有触发httpRequest。
这是我的代码:
Parse.Cloud.beforeSave('SearchList', function (request, response) {
if ( ! request.object.isNew())
response.success();
var SearchList = Parse.Object.extend('SearchList');
var query = new Parse.Query(SearchList);
query.equalTo('Id', request.object.get('Id'));
query.first({
success: function (entry) {
if (entry) {
var address = request.object.get('Street1') + ', ' + request.object.get('Street2') + ', ' + request.object.get('Street3') + ', ' + request.object.get('Suburb') + ', ' + request.object.get('State') + ', ' + request.object.get('Postcode');
for (var attr in request) {
entry.set(attr, request[attr]);
}
entry.set('Address', address);
if (request.object.get('Type') === 'Bus') {
address = request.object.get('Street1') + ', ' + request.object.get('State');
console.log('Bus Address: ' + address);
Parse.Cloud.httpRequest({
method: 'POST',
url: 'https://maps.googleapis.com/maps/api/geocode/json',
params: {
address : address,
key: 'my-api-key'
},
success: function(httpResponse) {
var response = httpResponse.data;
if (response.status === 'OK') {
var langLat = response.results[0].geometry.location;
console.log(langLat);
entry.set('Location', new Parse.GeoPoint({ latitude: Number(langLat.latitude), longitude: Number(langLat.longitude) }));
entry.save();
response.error('Updated Existing Entry');
}
},
error: function(httpResponse) {
entry.set('Location', null);
entry.save();
response.error('Updated Existing Entry');
}
});
} else {
entry.set('Location', new Parse.GeoPoint({ latitude: Number(request.object.get('Latitude')), longitude: Number(request.object.get('Longitude')) }));
entry.save();
response.error('Updated Existing Entry');
}
} else {
response.success();
}
},
error: function (err) {
response.error('Could not validate uniqueness for the Id object.');
}
});
});
所以我的代码在保存期间做了什么,我检查了条目是否已经存在于数据库中。如果存在,我只需更新其值,然后返回response.error
告诉parseObject.save
不要继续保存数据,因为它已经存在,否则我会返回response.success
告诉parseObject.save
继续保存数据。所以在这个过程中有一些数据没有lat-long值,所以我必须检查它们是否有lat-long,如果不是,我想使用条目的地址w / Google Maps进行Geolocation查询用于检索lat-long值的API。
关于如何在beforeSave期间使用Google Maps API执行地理位置的任何想法?
由于
答案 0 :(得分:0)
当你调用reaponse成功或错误时,你发出信号表明函数已经完成,所以不能保证完成任何事情,特别是如果它是异步的。
您应该发出异步请求并更新传递的对象,然后返回成功以保存它。