Проблемы с использованием возвращенных данных обратного вызова из геокодера Google Maps - PullRequest
0 голосов
/ 08 мая 2020

Я работаю над этим vue проектом, в котором я пытаюсь запустить эту функцию, где я использую карты Google для обратного геокодирования адреса, извлечения информации из этого адреса и запуска другой функции, используя измененные данные обратного вызова. Я понимаю, что функция геокодера возвращает обещание и что вы не можете использовать результат, пока обещание не будет выполнено, но мне не удается заставить остальную часть моей программы ждать, пока обещание не будет возвращено.

моя начальная настройка аналогична той, которая описана в этом вопросе Использование функции обратного вызова с Google Geocode ...

methods:{
        ...mapActions({
        newFunction: "someModule/newFunction",
        }),

        getLocationData(callback) {
              let geocoder = new this.google.maps.Geocoder();
              const latlng = this.mapCenter;   //latitude and longitude positions from elsewhere
              if( geocoder ) {
                geocoder.geocode({ 'location': latlng }, function (results, status) {
                  if( status == this.google.maps.GeocoderStatus.OK ) {
                    callback(results[0].formatted_address);
                  }
                });
              }
            },

      searchLoacal(){
        this.getLocationData(function(locationData) {
           alert(locationData)

         })
      }
}

, пока здесь все работает нормально, но я не уверен, как для дальнейшего извлечения обратного вызова locationData из getLocationData и использования его в других функциях. ive пробовал такие вещи, как

async searchLocal(){
     let result =  await this.getLocationData(function(locationData) {
         return locationData
       })
       this.newFunction(result)
}

, где newFunction запускается с входным значением null, не дожидаясь выполнения обещания, или ...

searchLocal(){
      this.getLocationData(function(locationData) {
         this.newFunction(locationData)
       })
    }

, где читается "typerror: Невозможно прочитать свойство newFunction of undefined "

Мне интересно, как сделать внешние функции доступными для обратного вызова из моей функции обратного геокодирования, пока фактически ожидает результата.

1 Ответ

0 голосов
/ 08 мая 2020

Я решил свою проблему, поместив свойства «this» в отдельную переменную (self), что сделало все эти методы доступными внутри функции обратного вызова.

searchLocal(){
      let self = this
      this.getLocationData(function(locationData) {
         self.newFunction(locationData)
       })
    }
...