есть observable созданный из Subject:
private searchData$: Observable<ISearchData>;
constructor (private conService: ConnectionService) {
this.searchData$ = <Observable<ISearchData>>conService.messages.pipe(
filter((message) => {
return message.key === QUERYBASE.search.key;
}),
map ((message)=>{
return message.data as ISearchData;
})
);
}
есть метод который отправляет запрос, после которого в messages появляются те сообщения которые пройдут фильтр, и подписывается на searchData$
public startSearch(){
let queryData: ISearchQueryData = ...
this.searchDataSub = this.searchData$.subscribe(
(data)=>{
console.log("Get search data: ",data);
if (data.hash !== this.lastHash) {
this.items = data.search;
this.lastHash = data.hash;
}
this.searchDone = data.done;
}
);
const newSub = this.searchData$.pipe(
delay(2000)
).subscribe(
(data)=> {
console.log("sub2", data);
//!data.done && this.conService.search(queryData);
}
);
this.conService.search(queryData);
}
если вторую подписку выпилить - первая работает (в консоли появляется "Get search data: , ...", данные обрабатываются)
а если оставить обе, почему-то работает только вторая подписка!! (в консоли только "sub2, ...", данных нет)
Я конечно могу вставить костыль и оставить только первую подписку в которой через таймаут отправлять запрос, но блин все учебники говорят о том что можно делать два .subscribe на один observable, и без всяких выкрутасов, так почему у меня оно не работает?
.pipe убирать пробовала, та же дичь, работает только вторая подписка:
this.searchDataSub = this.searchData$.subscribe(
(data)=>{
console.log("Get search data: ",data);
/*...*/
}
);
const newSub = this.searchData$.subscribe(
(data)=> {
console.log("sub2", data);
//...
}
);
так в консоли только sub2