我试图弄清楚如何使用ReplaySubject,以便它的观察者在订阅新的可观察对象(例如HTTP GET)时可以重复触发。
这是我使用的提供程序:
export class CatalogService {
public borrow$: ReplaySubject<Borrow[]> = new ReplaySubject<Borrow[]>(null);
constructor(public http: HttpClient) {
}
public getBorrowView() {
this.http.get<Borrow[]>(apiUrl + 'Borrow/View').subscribe(this.borrow$);
}
...
}
我有两个观察员-一个在主要组件中,另一个在未实例化的子组件中。
主要组件中的观察者通过以下方式订阅:
this.catalogService.borrow$.subscribe(
borrowList => {
if (borrowList != null)
this.pages[1].badge = borrowList.length;
}
);
未实例化的子组件中的观察者以下列方式订阅:
export class BorrowViewPage {
items$: Observable<Borrow[]>;
constructor(public navCtrl: NavController, public catalogService: CatalogService, public navParams: NavParams) {
this.items$ = this.catalogService.borrow$;
}
}
我希望他们两个都订阅HTTP请求,并在我在主要组件或其他地方进行函数调用时继续响应:this.catalogService.getBorrowView()
但是,此方法只能使用一次。它在子组件上工作正常。对于主要组件,它在第一次之后就不起作用。我尝试取消订阅并将其订阅,但最终导致触发得太早而产生了错误的结果。