Угловой перехватчик, запустить код после завершения исходящего запроса

Я получил простой перехватчик, который проверяет, относится ли исходящий запрос к определенному типу конечной точки, в этом случае events а также favoriteevents,

Это почти работает, как и ожидалось. Единственное, что он делает неправильно, это то, что this.dispatcher отправка до завершения исходящего запроса.

Как я могу изменить его так, чтобы исходящий запрос выполнялся в первую очередь, а затем выполнялся диспетчерский вызов?

import {Injectable, Injector, Optional} from '@angular/core';

import {
  HttpRequest,
  HttpHandler,
  HttpEvent,
  HttpInterceptor
} from '@angular/common/http';

import {Observable} from 'rxjs/Observable';

import {AppConstants} from '@constants/app-constants.constant';
import {DispatcherService} from '@services/dispatcher.service';

@Injectable()

export class EventsInterceptor implements HttpInterceptor {

  constructor(private dispatcher: DispatcherService) {}

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

    const urls = [
      {requestType: 'PUT', snippet: '/events/'},
      {requestType: 'DELETE', snippet: '/events/'},
      {requestType: 'PUT', snippet: '/favoriteevents'},
      {requestType: 'DELETE', snippet: '/favoriteevents'}
    ];

    for (const url of urls) {

      if (req.method === url.requestType || url.requestType === null) {

        if (req.url.indexOf(url.snippet) !== -1) {
          this.dispatcher.dispatch({type: AppConstants.actions.refreshFavoriteEvents});
        }
      }
    }

    return next.handle(req);
  }
}

1 ответ

Решение

Вы можете попробовать что-то вроде

...
return next.handle(req).pipe( tap( () => {
    if (someCondition) this.dispatcher.dispatch(...);
}) );
Другие вопросы по тегам