Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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 编写地理定位API,作为角度测量的承诺或可观测_Javascript_Angular_Callback_Promise_Observable - Fatal编程技术网

Javascript 编写地理定位API,作为角度测量的承诺或可观测

Javascript 编写地理定位API,作为角度测量的承诺或可观测,javascript,angular,callback,promise,observable,Javascript,Angular,Callback,Promise,Observable,我正在使用Angular 6,需要获得承诺中的位置数据。geolocationapi有一个针对success和error的回调navigator.geolocation.getCurrentPosition(successCallback,errorCallback) 如何为使用成功和错误回调的Angular编写承诺或可观察的?您可以创建一个异步typescript函数来返回一个新承诺 async getLocation() { return new Promise((resolve, r

我正在使用Angular 6,需要获得承诺中的位置数据。
geolocationapi
有一个针对success和error的回调
navigator.geolocation.getCurrentPosition(successCallback,errorCallback)


如何为使用成功和错误回调的Angular编写承诺或可观察的?

您可以创建一个异步typescript函数来返回一个新承诺

async getLocation() {
  return new Promise((resolve, reject) => {
    navigator.geolocation.getCurrentPosition(resolve, reject);
  });
}

const pos = this.getLocation();
pos.then(res => {
  console.log(res);
})
.catch(err => {
  console.log(err);
});
我不知道是否有更好的方法,但这似乎有效。

从可观察的角度来看

getLocation(): Observable<any> {
 return new Observable(obs => {
  navigator.geolocation.getCurrentPosition(
    success => {
      obs.next(success);
      obs.complete();
    },
    error => {
      obs.error(error);
    }
  );
});
}
getLocation():可观察{
返回新的可观测值(obs=>{
navigator.geolocation.getCurrentPosition(
成功=>{
obs.next(成功);
obs.complete();
},
错误=>{
观测误差(error);
}
);
});
}

异步getLocation
不需要异步
getLocation(): Observable<any> {
 return new Observable(obs => {
  navigator.geolocation.getCurrentPosition(
    success => {
      obs.next(success);
      obs.complete();
    },
    error => {
      obs.error(error);
    }
  );
});
}