Как я могу вызвать Observable с таймером внутри Observable с машинописью? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть вызов HTTP POST на Angular, который занимает около 15-20 секунд.В моем бэкэнде я предоставляю вычисленное значение для индикатора выполнения пост-вызова во внешнем интерфейсе.

Теперь я хочу делать вызовы HTTP GET каждые 250 мс после инициации POST-вызова, пока не завершится пост-вызов.

Я посмотрел на операторов Rxjs, но не смог найти решение, как правильно их объединить / передать (например, таймер или интервал)

Это мой текущий код:

// this is the Observable which does the post call when subscribing
const x = this.apiService.importBackUp(this.backupList);

x.subscribe(); // here I want to subscribe to my GET call every 250ms until completion

apiService.ts:

importBackUp(backup: BackupList[]): Observable<any> {
    return this.httpClient.post(this.API_URL + '/Settings/import', backup)
      .pipe(
        catchError(this.handleError('Import Backup', null))
      );
}

getProgress(): Observable<number> {
    return this.httpClient.get<number>(this.API_URL + '/Settings/progress')
      .pipe(
        catchError(this.handleError('Get Import Progress', null))
      );
}

1 Ответ

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

попробуйте

interval(250).pipe(
        mergeMap(()=>this.apiService.getProgress()),
        tap(progress=>do you process update ....),
        takeUntil(this.apiService.importBackUp(this.backupList))
        ).subscribe()

или

this.apiService.importBackUp(this.backupList).pipe(
withLatestFrom(
    interval(250).pipe(
    switchMap(()=>this.apiService.getProgress()),
    tap(progress=>do you process update ....),
    )
)
.subscribe()
...