我正在使用角度解析器为我的路线提供数据。对于其中之一,我需要获取给定地址字符串的经度和纬度。为此,我使用了Google地理编码api:
service.geocode({address: params.address}, results => {
params.lat = results[0].geometry.location.lat();
params.lon = results[0].geometry.location.lng();
});
因此在我的服务中,我需要等待回调触发后再调用apiService,因此主要思想是实现这一点:
search(params): Observable<Calendar[]> {
return service.geocode({address: params.address}, results => {
params.lat = results[0].geometry.location.lat();
params.lon = results[0].geometry.location.lng();
return this.apiService.get('/api/v1/website/' + environment.web_id + '/calendar/_search', params)
.pipe(map(
data => {
return data;
}
));
});
}
但是我需要返回一个Observable,所以这将无法工作。 有没有一种方法可以获取可观察到的地址解析回调,然后使用rxJs运算符将它们链接起来?
谢谢!
答案 0 :(得分:1)
当然有办法。最简单的步骤是将整个事物包装成可观察的形式。天真的方法是这样做:
y = np.dstack((x,z,x)).swapaxes(0,2)
y.shape
# (3, 2, 2)
现在,我们可能会做得更好,并提取其中的一部分。
search(params): Observable<Calendar[]> {
// First, an observable. We get the observer back.
return Observable.create(observer => {
// Now go call your service.geocode (whatever that might be)
service.geocode({address: params.address}, results => {
// extend your params with the extra information.
params.lat = results[0].geometry.location.lat();
params.lon = results[0].geometry.location.lng();
// shot the http request
this.apiService.get('/api/v1/website/' + environment.web_id + '/calendar/_search', params)
.pipe(
map(data) => {
// When the data is back, resolve it.
observer.next(data);
observer.complete();
}),
);
});
});
您可以继续做下去,但这是最基本的。
答案 1 :(得分:-1)
您可以通过多种方式来实现这一目标(rxjs6)
import { of } from 'rxjs';
,然后根据该值创建可观察对象,如下所示:
of(someValue);
如果直接返回someValue,它将是正常数据,但是如果您使用rxjs中的operator,则可以将该数据转换为可观察的数据,并在需要时进行订阅,请相应地修改代码,希望对您有帮助>