我有以下代码:
const completeSubject = new Subject<void>();
const getData: Observable<HttpEvent<any>> = this.http.get<any>(url, options);
const getParsedData: Observable<IResult[]> = getData.pipe(
map((response: HttpResponse<any>) => {
return this.processSuccessResponse(response);
})
);
const intervalStream: Observable<IResult[]> = interval(1000).pipe(
concatMap(() => getData),
map((response: HttpResponse<any>) => {
return this.processSuccessResponse(response, completeSubject);
}),
takeUntil(completeSubject)
);
concat(getParsedData, intervalStream);
因此,此循环进行第一个http调用,然后每秒重复一次此调用,一切正常。不过我需要能够取消它,这就是takeUntil(completeSubject)
代码应该做的。但是,即使我将completeSubject.complete()
或completeSubject.next()
设置为继续循环,我仍希望这能取消interval
。
我在这里做错了什么?或者如何使用其他方法取消此循环?
答案 0 :(得分:0)
最后还是一个有趣的问题。问题是Subject<void>();
和随后对completeSubject.next()
的调用(无值)。这似乎不会触发takeUntil
代码。我将其更改为Subject<boolean>();
和completeSubject.next(false)
,它的行为符合预期。
感谢@JB Nizet的帮助