我有一个订阅的主题,并在用户搜索时触发。
let searchView;
this.searchSubject
.switchMap((view: any) => {
searchView = view;
this.http.post(this.url, view);
})
.subscribe(page => {
this.searchHistoryService.addRecentSearch(searchView).subscribe();
})
searchHistoryService.addRecentSearch记录此搜索,以便用户可以查看他们最近的搜索。
我不认为这是一种很好的做法,因为每次都会订阅observable,我宁愿使用我打电话.next()的主题,也可以将历史调用与搜索调用结合起来本身。
如果searchHistoryService.addRecentSearch返回一个Subject我可以调用.next()但我会在哪里订阅它?
我尝试在searchHistoryService的构造函数
中添加它this.searchHistorySubject.do(observableIWantToCall()).subscribe()
然后将订阅替换为' addRecentSearch'有了这个:
this.searchHistoryService.searchHistorySubject.next(searchView)
但它不起作用。
内部observable,observableIWantToCall()被调用,但是oborderable返回并未订阅。
这有什么不对,当另一个人完成发放时订阅观察者的最佳做法是什么?
答案 0 :(得分:0)
我认为你可以这样做:
let searchView;
private searchHistorySubject$: Subject<any> = new Subject<any>();
constructor(){
this.searchHistoryService.addRecentSearch(searchView).first().subscribe(
response => {
//It will entry when you send data through next
},
error => {
console.log(error);
}
);
}
...
addRecentSearch(searchView) {
...
return this._searchHistorySubject$.asObservable();
}
setSearchHistoryEvent(value: any) {
this._searchHistorySubject$.next(value);
}
this.searchSubject
.switchMap((view: any) => {
searchView = view;
this.http.post(this.url, view);
})
.subscribe(page => {
this.searchHistoryService.setSearchHistoryEvent(searchView);
}
)