Как создать httpGate с Obserservable - PullRequest
       38

Как создать httpGate с Obserservable

0 голосов
/ 04 сентября 2018

У меня есть несколько запросов, которые я хочу приостановить до тех пор, пока запрос проверки подлинности 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.

1 Ответ

0 голосов
/ 04 сентября 2018

Вместо того, чтобы делать это из intercept(), я бы порекомендовал вам создать свой собственный ApiService, предоставить несколько методов и выполнить все ваши HTTP-вызовы оттуда.

Внутри вашего ApiService вы можете иметь, например:

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

Таким образом, каждый раз, когда вы вызываете свою конечную точку, ваш запрос будет зависать там, пока пользователь не будет аутентифицирован. Или он сделает звонок немедленно, если пользователь уже аутентифицирован.

...