Я пытаюсь выполнить геолокацию с помощью API Карт Google для события beforeSave для Parse Cloud. Проблема заключается в том, что httpRequest не запускается между процессом.Google Geolocation on beforeSave
Вот мой код:
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, поэтому я должен проверить, имеют ли они long-long, если они не хотят делать запрос Geolocation, используя адрес записи w/Google Maps API для получения значений lat-long.
Любые идеи о том, как я могу выполнять геолокацию с помощью API Карт Google во время beforeSave?
Благодаря
Почему вы запрашиваете, чтобы найти объект, когда он новый, и поэтому не должен существовать в хранилище данных? Итак, если это не ново, ничего не делайте, и если оно новое, найдите существующий элемент (который не должен существовать) и только сделайте запрос, если мы его найдем. Это кажется нелогичным, поэтому вам нужно более подробно объяснить, что вы делаете. – Wain
@ Извините, я не очень хорошо объяснил, что делает мой код. Итак, в этой части я проверил, существует ли новая запись, и если она существует, я просто обновляю значения и выполняю 'response.error', который сигнализирует' parseObject.save() ', чтобы не продолжать сохранять object, else я возвращаю 'response.success', говорящий' parseObject.save() ', чтобы продолжить сохранение новых данных. Причина, по которой я хотел выполнить поиск геолокации, заключается в том, что мне нужно получить латентные точки для существующих данных, потому что некоторые данные не включают latlong, поэтому мне нужно выполнить проверку, включают ли они значения latlong. – Renesansz