使用Angular Interceptor时使用Observables或回调函数的代码执行流程

问题描述 投票:0回答:1

我有一种情况,我想在Angular 4中使用服务获取设备地理位置。

export class GeoHttpService implements HttpInterceptor {

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    let position: object;

    navigator.geolocation.getCurrentPosition(
       (position) => {
         position = position;
         console.log("position :", position) // here i get the data.
       },
       (err) => {
         console.log("error : ", err);
       }
    );

// here i need to return an Observable with the position taken from the callback function
// if I do console.log(position) it will not give me the position data so I can't modify
// the request.

 return next.handle(req);
}

哪一个是获取位置数据和修改实际请求的最佳实践方法?现在回调函数阻止我这样做。

谢谢。

angular callback observable
1个回答
0
投票

这里的主要方法是:

  1. 在一些promisify转换器函数中包装地理定位请求以从中获得承诺。
  2. 将Promise转换为Observable
  3. 合并next.handle(req)并产生可观察性,就像本文中描述的那样https://medium.com/@danielcrisp/async-http-interceptors-with-angular-4-3-9e6e795da562
© www.soinside.com 2019 - 2024. All rights reserved.