Angular / RxJS:发送API请求,然后轮询另一个端点

时间:2018-09-25 17:39:02

标签: angular http rxjs observable

我要发送一个API请求,然后轮询另一个端点,直到从第二个端点返回带有success: true正文的响应。我正在使用Angular的HTTPClient发出请求。我最初的想法是这样做:

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')
          })
        )
      })
    );

但是,直到发出第一个请求的响应的第一个post()调用后,才会调用mergeMap。是否有RxJS运算符可以让我在发出第一个post()调用之前开始轮询?

1 个答案:

答案 0 :(得分:0)

尝试:

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$));
}