Обновление 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()
      });
    });
Другие вопросы по тегам