Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可见,我做得对吗?_Javascript_Typescript_Geolocation_Angular_Rxjs - Fatal编程技术网

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
    将被观察者发射的项目传送给观察者
  • 未完成
    表示可观察对象已成功完成,并且 它将不会发出更多的项目
因此,如果要继续激发事件,则不应调用completed

 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);
        };
    });
}