http GET не повторяется / не выполняется, пока не будет отправлен другой запрос - PullRequest
0 голосов
/ 09 февраля 2019

У меня проблема с опросом некоторых данных с помощью запроса GET от API.Я хотел бы опрашивать данные каждую 1 секунду, до 30 секунд.Дело в том, что angular, кажется, выполняет запросы (это протоколирование ответа), хотя на самом деле он не выполняет запрос к серверу .

Я написал следующие методы в своем сервисе:

private pollStatus(token: string, remember: boolean):Observable<any> {
  const httpOptions = {
    headers: new HttpHeaders({
      'Token': token,
      'Remember': '' + remember
    })
  };
  const url = 'auth/status';

  return this.http.get<any>(url, httpOptions).pipe(map(response => {
    console.log('polldata', response.status);
    return response;
  }));
}

public secondFactor(token: string, remember: boolean): Observable<any> {

  let pollData$ = this.pollStatus(token, remember);

  let watchdog = timer(30 * 1000);
  // this.http.post<any>('/auth/login', {}).subscribe();

  return Observable.create(subject => {
    let pollSubscription = pollData$.pipe(expand(_ => timer(1000).pipe(concatMap(_ => pollData$))), takeUntil(watchdog)).subscribe(response => {
      console.log('secondFactor', response.status);
      // some action based on the response is performed here
    });
  });
}

В компоненте, который я называю так:

public ngOnInit(): void {
    this.authService.secondFactor(this.authyToken, true).subscribe(response => {
      console.log('response in component', response);
    });
}

В консоли я вижу, что подписка на запрос get выполняется несколько раз (код: console.log('polldata', response.status); выполнено).К сожалению, только один запрос выполняется к серверу (проверено на бэкэнде и на вкладке сети).

Вывод на консоль:

polldata pending
secondFactor pending
polldata pending
secondFactor pending
polldata pending
secondFactor pending
polldata pending
secondFactor pending
polldata pending
secondFactor pending

etc. etc. etc.

Iпроверил это поведение в разных браузерах (Safari & Chrome) - та же проблема.

Обходной путь:

Я обнаружил, что если я отправлю некоторый POST-запрос намой сервер (прокомментированная строка: // this.http.post<any>('/auth/login', {}).subscribe(); в методе secondFactor()), затем Angular начинает выполнять запросы GET более одного раза.

1 Ответ

0 голосов
/ 09 февраля 2019

Можете ли вы проверить, будет ли это работать:

public secondFactor(token: string, remember: boolean): Observable<any> {
    let pollData$ = this.pollStatus(token, remember);

    let watchdog = timer(30 * 1000);

    return interval(1000).pipe(
        takeUntil(watchdog),
        concatMap(() => pollData$),
        tap(response => console.log('secondFactor', response.status))
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...