Javascript 可见,我做得对吗?
我有以下服务:Javascript 可见,我做得对吗?,javascript,typescript,geolocation,angular,rxjs,Javascript,Typescript,Geolocation,Angular,Rxjs,我有以下服务: getPosition(): Observable<Object> { return Observable.create(observer => { navigator.geolocation.watchPosition((pos: Position) => { observer.next(pos); observer.complete(); }),
getPosition(): Observable<Object> {
return Observable.create(observer => {
navigator.geolocation.watchPosition((pos: Position) => {
observer.next(pos);
observer.complete();
}),
() => {
console.log('Position is not available');
},
{
enableHighAccuracy: true
};
});
}
但不幸的是,它不起作用。我假设每次位置改变,lat和long都会改变。但它不起作用。这里有一个问题与可观察合同有关 “可观察合同”,您可以在源文件和本网站页面的不同位置看到该合同, 是对可观察的、基于 最初在2010年微软Rx设计指南文件中 它描述了ReactiveX的Rx.NET实现。 本页总结了可观察合同 通知
- OnNext
将被观察者发射的项目传送给观察者 - 未完成
表示可观察对象已成功完成,并且 它将不会发出更多的项目
getPosition(): Observable<Object> {
return Observable.create(observer => {
navigator.geolocation.watchPosition((pos: Position) => {
observer.next(pos);
// simply call next again, but not complete
// until position is completed
//observer.complete();
}),
...
getPosition():可观察{
返回可观察的。创建(观察者=>{
navigator.geolocation.watchPosition((位置:位置)=>{
下一个观察员(pos);
//只需再次调用next,但不完整
//直到职位完成
//observer.complete();
}),
...
您的逗号放错了位置,而且您应该在取消订阅时停止观察者,并将错误转发给观察者
public $getDeviceLocation():Observable<Position> {
return Observable.create(observer => {
const onSuccess:PositionCallback = (pos:Position) => {
observer.next(pos);
};
const onError:PositionErrorCallback = (error) => {
observer.error(error);
};
const options:PositionOptions = this.locationOptions();
const watcher:number = navigator.geolocation.watchPosition(onSuccess, onError, options);
return () => {
navigator.geolocation.clearWatch(watcher);
};
});
}
public$getDeviceLocation():可观察{
返回可观察的。创建(观察者=>{
const onSuccess:PositionCallback=(pos:Position)=>{
下一个观察员(pos);
};
const onError:PositionErrorCallback=(错误)=>{
观察者错误(错误);
};
const options:PositionOptions=this.locationOptions();
const watcher:number=navigator.geolocation.watchPosition(onSuccess、onError、options);
return()=>{
navigator.geolocation.clearWatch(watcher);
};
});
}
watchPosition应获取新位置并更新观测值I假设每次位置改变时,观察者都会被调用。下一个(pos)将被调用从geolocation.watchPosition获取的新位置。我在这里错了吗?这是真的,除非你在第一次监视触发后停止,调用complete…(根据合同)意思是,没有其他的下一个预期…停止观察…这有帮助吗?
getPosition(): Observable<Object> {
return Observable.create(observer => {
navigator.geolocation.watchPosition((pos: Position) => {
observer.next(pos);
// simply call next again, but not complete
// until position is completed
//observer.complete();
}),
...
public $getDeviceLocation():Observable<Position> {
return Observable.create(observer => {
const onSuccess:PositionCallback = (pos:Position) => {
observer.next(pos);
};
const onError:PositionErrorCallback = (error) => {
observer.error(error);
};
const options:PositionOptions = this.locationOptions();
const watcher:number = navigator.geolocation.watchPosition(onSuccess, onError, options);
return () => {
navigator.geolocation.clearWatch(watcher);
};
});
}