如何在 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();
}
);
});
}
我应该将此 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();
}
);
});
}