Обновление Firebase в асинхронном методе Google Geocode
Я пытаюсь написать метод, который обновляет мою базу данных Firebase после завершения функции геокодирования. Я пишу код на Angular2, поэтому моя база данных Firebase определена в моем конструкторе. Я понимаю, что проблема связана с асинхронными функциями, но я не уверен, как это сделать. Вот мой код:
geocoding(callback){
var geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': this.loc}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
callback([results[0].geometry.location.lat(), results[0].geometry.location.lng()]);
} else {
this.lat = 0;
}
});
}
а также:
geocode(){
this.geocoding(function(latLng){
this.db.object('users/' + this.auth.id).update({
lat: latLng[0],
lng: latLng[1]
});
});
}
1 ответ
Решение
Я понял, как это сделать. Оказывается, вам нужно использовать обещания, вот рабочий код:
geocode(address){
return new Promise(function(resolve,reject){
var geocoder = new google.maps.Geocoder();
geocoder.geocode({'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
resolve(results);
} else {
this.lat = 0;
}
});
});
}
а также:
this.geocode(this.loc).then(results => {
this.db.object('users/' + this.auth.id).update({
lat: results[0].geometry.location.lat(),
lng: results[0].geometry.location.lng()
});
});