주어진 간격 (5 초마다)으로 로그를 폴링하는 서비스를 만들려고합니다. http GET 호출을해야하지만 느린 연결과 큰 로그의 경우 switchMap
은 이전 보류중인 요청을 취소합니다. 따라서 요청이 취소됨에 따라 로그가 표시되지 않습니다.Rxjs Observable Interval and Angular2 HTTP : 응답 대기
getLog(url:string):Observable<string> {
return Observable
.timer(0, 5000)
.switchMap(() => this.get(url))
.retryWhen(error => error.delay(5000))
.map((res:Response) => res.text())
.catch(e => {
console.warn(e.toString());
return Observable.from("");
});
}
및 this.get(url)
단순히 get(url) {return this.http.get(url)}
입니다.
타이머 기능을 유지하려고하지만 이전 호출이 해결 될 때까지 다른 http 호출을 시작하지 말고 대기중인 호출을 취소하지 않으려합니다.
[RxJava에서 플랫 맵과 스위치 맵의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/28175702/what-is-the-difference-between-flatmap-and-switchmap-in- rxjava) – jonrsharpe
또 다른 방법은'flatMap'을 사용하는 것입니다. – jonrsharpe
@jonrsharpe'flatMap'은 새로운 요청을 계속 생성합니다. 보류중인 요청이 완료 될 때까지 새 요청을 생성하고 싶지 않습니다. – bomba6