如何使用Obserservable创建一个httpGate

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

我有多个请求要暂停,直到验证身份验证http请求为止。这意味着我应该有一个http门,请求可以通过而不必进行身份验证,有些人会等到身份验证令牌回来。

我想过使用像下面的代码一样的switchmap但是它不会工作,因为一个带有返回值的可观察开关。

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
 return next.handle(req)
  .switchMap((event: HttpEvent<any>, index: number): Observable<HttpEv

ent<any>> => {

// without the **req.url.indexOf('/index')>-1**
//// Error Meassage: ***You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.***

   if(this.token || req.url.indexOf('/index')>-1) {
    return Observable.of(event);
   }
  })
  .do(
   next: function(data){
    console.log(data);
   },
   error: function(error: HttpErrorResponse){
    // retry
    // or handling data
   }
  );

错误信息

您在预期的流中提供了“未定义”。您可以提供Observable,Promise,Array或Iterable。

angular switch-statement observable httpclient angular-http-interceptors
1个回答
0
投票

而不是从intercept()做,我建议你创建自己的ApiService,暴露一些方法,并从那里进行所有的HTTP调用。

在你的ApiService内,你可以有例如:

Get(url: string): Observable {
  return of(0).pipe(
    switchMap(() => this.waitForAuth()),
    switchMap(() => this.$http.get(url))
  );
}

因此,每次调用端点时,您的请求都将挂起,直到用户通过身份验证。或者,如果用户已经过身份验证,它会立即拨打电话。

© www.soinside.com 2019 - 2024. All rights reserved.