如何构建返回Observable的服务?

Tam*_*gár 1 angular

我正在构建一个查询Google Maps Places Autocomplete API并返回对象数组的服务。服务本身非常简单。我正在使用Maps JS API。字符串将传递给服务,并返回匹配项列表。

问题是如何使该服务输出成为Angular Observable?

这是我现在的位置:

import {Injectable, OnInit} from '@angular/core';
import {Observable} from 'rxjs/Rx';
declare var google: any;

@Injectable()
export class GoogleMapsService {

    getAutocomplete(input = {'input': '', 'types': [] } ) {
        var autocomplete = new google.maps.places.AutocompleteService();
        return autocomplete.getPlacePredictions({ input: input.input });
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不是可观察的,我不能.subscribe做到这一点。

Jul*_*ova 5

该文档说autocomplete.getPlacePredictions有两个参数:request和callback函数。因此,您可以执行以下操作:

Observable.create(obs => {
  let displaySuggestions = function (predictions, status) {
    if (status != google.maps.places.PlacesServiceStatus.OK) {
      obs.error(status);
    }
    else {
      obs.next(predictions);
      obs.complete();
    }
  };

  var service = new google.maps.places.AutocompleteService();
  service.getQueryPredictions({input: 'test'}, displaySuggestions);
});
Run Code Online (Sandbox Code Playgroud)