可以观察到,我做得对吗?

ada*_*wak 4 javascript geolocation rxjs typescript angular

我有这项服务:

 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
        };
    });
}
Run Code Online (Sandbox Code Playgroud)

我想这样使用它:

this.getLocationService.getPosition().subscribe((pos: Position) => {
        self._latitude = pos.coords.latitude;
        self._longitude = pos.coords.longitude; }
Run Code Online (Sandbox Code Playgroud)

但不幸的是它不起作用.我假设每次位置变化,纬度和长度都会改变.但它不起作用.

Rad*_*ler 7

这里的一个问题与Observable合同有关

可观察合同

您可以在源文档和本网站页面中的不同位置看到的"可观察合同"是对Observable的正式定义的尝试,最初基于Microsoft的2010年文档Rx设计指南描述了它Rx.NET实现ReactiveX.本页概述了可观察合同.

通知

An Observable communicates with its observers with the following notifications:
Run Code Online (Sandbox Code Playgroud)
  • OnNext
    将Observable发出的项目传达给观察者
  • OnCompleted
    表示Observable已成功完成 ,并且它将不会发出更多项目
  • ...

因此,如果您想继续触发事件,则不应调用已完成

 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();
        }),
        ...
Run Code Online (Sandbox Code Playgroud)