Получение результата от функции обратного вызова из одного сервиса на другой странице - PullRequest
0 голосов
/ 19 апреля 2020

Хорошо, поэтому я на самом деле использую сервисы Google для расчета некоторых картографических маршрутов. Я поместил его в один сервис и код:

const directionsService = new google.maps.DirectionsService();
directionsService.route(route, (data, status) => {
  if (status === 'OK') {
    this.storage.routeValue = data.routes[0].legs[0].duration.value;
  }
});

}

Я передаю данные этому сервису с разных страниц, и все, что он делает, это данные ( lat and lng) рассчитывает маршрут и возвращает его обратно. Проблема, с которой я сталкиваюсь, заключается в том, что я также делаю несколько других вещей на моей текущей странице, где я изменяю локальные значения на некоторые переменные. Итак, у меня есть что-то вроде:

//This calls the code from above and pass the data from my page to the service:
this.googledirectionsService.route(data);
///I now have:
this.isStarted = true;
this.map.showPath();

Поэтому я вызываю другую функцию и после этого меняю локальную переменную. Но я не знаю, когда и будет ли сделан другой сервис. Что я могу использовать для улучшения этого кода? Наблюдаемые? Мне нужно знать, когда и как код завершил работу с моей службой googledirectionsService, и затем удалить другой код с моей текущей страницы. Я могу поместить переменную publi c в обратный вызов маршрута в сервисе и затем проверить мою текущую страницу, но проблема в том, что это может занять 2se c, 5se c .. и более или даже упасть, если данные неправильно, поэтому Мне нужно сначала узнать, каков результат моей службы, а затем продолжить с другим кодом.

1 Ответ

1 голос
/ 19 апреля 2020

Вы можете использовать обещание и выполнять новые операции после получения данных.

// your service code

const directionsService = new google.maps.DirectionsService();
const route = (route) => {
   return new Promise((resolve, reject) => {
      return directionsService.route(route, (data, status) => {
         if (status === 'OK') {
           this.storage.routeValue = data.routes[0].legs[0].duration.value;
            return resolve("your success message")
         } else {
            return reject("your error")
         }
    });
 });
};

 // your current file

 this.googledirectionsService.route(data).then(success => {
    this.isStarted = true;
    this.map.showPath();
 }).catch(error => {
    console.log("error", error)
 });

Пожалуйста, дайте мне знать, если это работает.

...