从距离矩阵Javascript API的回调函数访问类属性

从距离矩阵Javascript API的回调函数访问类属性,javascript,google-distancematrix-api,Javascript,Google Distancematrix Api,这是我的代码: declare var google; var service = new google.maps.DistanceMatrixService(); class BranchesPage { public branches: any = []; public allBranches: any = []; public travelDetails: any = []; constructor(){ this.getBranches();

这是我的代码:

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
      }
 }
google;
var service=new google.maps.DistanceMatrixService();
类分支页面{
公共分支机构:任何=[];
公共所有分支机构:任何=[];
公共旅行详情:任何=[];
构造函数(){
这个.getBranchs();
}
getBranchs(){
this.travelDetails=[];
this.branchProvider.getBranchs()
.订阅(数据=>{
this.allbranchs=数据;
这个.getBranchDistanceAndTime();
loadingbranchs.disclose();
},err=>{
控制台日志(err);
});
}
getBranchDistanceAndTime(){
for(让此的分支。所有分支){
此.getTravelDetails(分支);
}
}
getTravelDetails(分支){
service.getDistanceMatrix(
{
来源:[新google.maps.LatLng(6.870128,79.880340)],
目的地:[新建google.maps.LatLng(branch.lat,branch.lng)],
travelMode:“驾驶”
},这是回调);
}
回调(响应、状态){
让我们的目标成为现实;
如果(状态=‘正常’){
var origins=response.originAddresses;
var destinations=response.destinationaddress;
对于(变量i=0;i
我无法从回调函数访问我的travelDetails属性,因为它引发以下异常
uncaughtTypeError:无法读取null的属性“travelDetails”

由于某种原因,
this
关键字在回调函数中不可用。有什么解决方法吗?我已经在这个问题上纠缠了一天多了。如果有任何帮助,我们将不胜感激

谢谢各位


PS:在任何人询问之前,
branch.lat
branch.lng
正在按预期返回值。

请尝试
(r,s)=>{this.callback(r,s)}而不是
this.callback
@tymeJV非常感谢您的回复。现在不存在错误,但我无法从回调函数外部访问推送元素。当我在函数外部输入console.log时,它会记录一个空数组:(这是一个异步函数-取决于您尝试访问它的时间,数组中可能有数据,也可能没有数据。
getBranchDistanceAndTime
如果您想知道何时完成,应该进行回调或返回承诺。