如何在 Angular 中将 promise 转换为 observable

How to convert a promise to an observable in Angular

我应该将此 google 地理编码方法转换为可观察的方法吗?

如果可以,我该怎么做?

仅供参考 - 我不认为我需要拒绝承诺,只是 return 一个 null,所以我在下面做了一点小改动。

const geoCode = new Geocode();
geoCode.geocode('some address').then(place => {
  console.log(place.geometry.location);
})
.catch(err => {
  console.log(err);
});


export class Geocode {

  geocode(address: string): Promise<any> {
    const geocoder = new google.maps.Geocoder();
    return new Promise((resolve, reject) => {
      geocoder.geocode({
          address: address
        },
        (results, status) => {
          if (status === google.maps.GeocoderStatus.OK) {
            resolve(results[0]);
          } else {
            // reject(new Error(status)); // don't need to reject
            resolve(null);
          }
        }
      );
    });
  }
}

试试这个:

  geocode(address: string): Observable<any> {
    const geocoder = new google.maps.Geocoder();
    return new Observable(subscriber => {
      geocoder.geocode({
          address: address
        },
        (results, status) => {
          if (status === google.maps.GeocoderStatus.OK) {
            subscriber.next(results[0]);
          } else {
            subscriber.next(null);
          }
          subscriber.complete();
        }
      );
    });
  }