我要发送一个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()
调用之前开始轮询?
答案 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$));
}