Angular / RxJS: отправка запроса API, а затем опрос другой конечной точки - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу отправить запрос API, а затем опрашивать другую конечную точку, пока из второй конечной точки не вернется ответ с телом success: true.Я использую HTTPClient Angular для выполнения своих запросов.Моя первоначальная мысль заключалась в том, чтобы сделать это:

createConversion(request): Observable<any> {
    return this.http.post('/endpoint', request).pipe(

      // This is the problem: I want to start polling before this post() call emits

      mergeMap((response) => {

        // Start polling

        return timer(0, 5000).pipe(
          takeUntil(this.converted$),
          concatMap(() => {

            return this.http.get('/second-endpoint')
          })
        )
      })
    );

Однако mergeMap не вызывается до тех пор, пока первый вызов post() не отправится с ответом первого запроса.Есть ли оператор RxJS, который позволит мне начать опрос до того, как первый post() вызов вызовет?

1 Ответ

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

Попробуйте с:

createConversion(request): Observable<any> {
    const post$ = this.http.post('/endpoint', request).pipe(startWith(null)); 
    // force fake emission
    const get$ = this.http.get('/second-endpoint');
    const polling$ = timer(0,5000).pipe(mergeMap(_=> get$), takeUntil(this.converted$));

    return post$.pipe(mergeMap(_=> polling$));
}
...