如何从角度服务中的异步调用中获取数据?

时间:2018-02-25 21:38:33

标签: angular observable angular-services angular-components angular-observable

我正在尝试从Google Maps API的异步方法返回数据。

这就是我服务的外观。

    export class GMapsService {

  test = 'a';

  // public mysubject: Subject = new Subject();

  getData() {
    var origin1 = 'austin, TX';
    var destinationA = 'Dallas, TX';
    var service = new google.maps.DistanceMatrixService();

    return service.getDistanceMatrix(
      {
        origins: [origin1],
        destinations: [destinationA],
        travelMode: 'DRIVING',
        avoidHighways: false,
        avoidTolls: true,
      },
      function (response, status) {
        return response
        // return data back to component
// mysubject.next(response);
      }
    );
  }
}

我希望在数据从maps API返回时将数据发送到组件。此外,是否可以在数据发生更改时更新组件(不在此方案中)。我尝试使用主题,但我相信我错过了一些东西。

this.GMapsService.mysubject.next("My favourite value");

    this.GMapsService.mysubject.subscribe((value) => {
      //insert your code here

      console.log(value);

    });

1 个答案:

答案 0 :(得分:0)

尝试将回调函数作为箭头函数提供,这样回调的上下文将保留为GMapsService实例。

 return service.getDistanceMatrix({
        origins: [origin1],
        destinations: [destinationA],
        travelMode: 'DRIVING',
        avoidHighways: false,
        avoidTolls: true,
      },
     (response, status) => {

        // return data back to component
        this.mysubject.next(response);
     }
 );