Доступ к свойству класса из функции обратного вызова API Javascript Distance Matrix - PullRequest
0 голосов
/ 27 апреля 2018

Это мой код:

declare var google;
var service = new google.maps.DistanceMatrixService();
class BranchesPage {

   public branches: any = [];
   public allBranches: any = [];

   public travelDetails: any = [];

   constructor(){
       this.getBranches();
   }

   getBranches(){
       this.travelDetails = [];
       this.branchProvider.getBranches()
         .subscribe(data => {
             this.allBranches = data;
             this.getBranchDistanceAndTime();
             loadingBranches.dismiss();
         }, err => {
             console.log(err);
         });
    }

    getBranchDistanceAndTime(){
       for(let branch of this.allBranches){
           this.getTravelDetails(branch);
       }
    }

    getTravelDetails(branch){
        service.getDistanceMatrix(
        {
            origins: [new google.maps.LatLng(6.870128,79.880340)],
            destinations: [new google.maps.LatLng(branch.lat, branch.lng)],
            travelMode: 'DRIVING'
         }, this.callback);
     }

     callback(response, status) {
        let travelDetailsObject;
        if (status == 'OK') {
           var origins = response.originAddresses;
           var destinations = response.destinationAddresses;

           for (var i = 0; i < origins.length; i++) {
              var results = response.rows[i].elements;
              for (var j = 0; j < results.length; j++) {
                  var element = results[j];
                  var distance = element.distance.text;
                  var duration = element.duration.text;
                  var from = origins[i];
                  var to = destinations[j];
                  travelDetailsObject = {
                      distance: distance,
                      duration: duration
                  }
             }
          }
          console.log(travelDetailsObject)//this works perfectly retrieving the correct distances and durations
          this.travelDetails.push(travelDetailsObject); //error is on this line
      }
 }

Я не могу получить доступ к свойству travelDetails из моей функции обратного вызова, так как она вызывает следующее исключение Uncaught TypeError: Cannot read property 'travelDetails' of null

По некоторым причинам ключевое слово this не может использоваться внутри функции обратного вызова. Любое решение? Я застрял в этом вопросе уже более суток. Любая помощь будет принята с благодарностью.

Спасибо, ребята

PS: прежде чем кто-либо спросит, branch.lat и branch.lng возвращают значения, как и ожидалось.

...