我们可以使用Subject和switchMap操作符来解决这个问题。当需要取消可观察对象并重新调用服务方法时,可以先定义一个Subject作为开关,并在服务方法中使用switchMap来切换到新的可观察对象。
代码示例:
import { Subject } from 'rxjs';
cancel$: Subject = new Subject();
import { Observable, of } from 'rxjs';
import { switchMap, takeUntil } from 'rxjs/operators';
getData(): Observable {
return this.http.get(url)
.pipe(
switchMap(() => this.http.get(newUrl)),
takeUntil(this.cancel$)
);
}
getData() {
this.service.getData()
.subscribe(
data => {
// do something with data
}
);
}
cancelPreviousRequest() {
this.cancel$.next();
}