Спрашивая это как продолжение этого (Как вернуть наблюдаемое из подписки), так как принятое решение не решило мой вариант использования Вот мой код
@Effect()
searchQuery$ = this.actions$
.ofType(PlayerSearchActions.SEARCH_NEW_QUERY)
.map(toPayload)
.withLatestFrom(this.store)
.map((latest: any[]) => latest[1])
.do((res)=>{console.log("Starting search with:",res);})
.switchMap((store: MyState) =>
this.youtubeSearch.resetPageToken()
.searchAll(store.search.query, store.search.queryParams)
.do((res)=>{console.log("Effects all:",res);})
.map((youtubeResponse) => this.playerSearchActions.searchResultsReturned(youtubeResponse))
.do((res)=>{console.log("Effects intermediate",res);})
).do((res)=>{console.log("Effects complete",res);});
searchAll(query: string, params?: any) {
console.log('entered searchAll');
let subject = new Subject();
this.nowChannellist$.map(channels => channels.map(channel => {
this._apiOptions.channelId = channel.channelId;
console.log('entered searchAll for channel:',channel.name);
subject.next(this.search(query, params));
subject.complete();
return channel;
})).do((res) => { console.log('searchAll done', res); });
return subject;
}
search(query: string, params?: any) {
//....some code operating on query and params
return this.http.get('https://www.googleapis.com/youtube/v3/search', _options)
.map(response => response.json())
}
Вывод на консоли:
Начинаем поиск с: Объект {игрок: Объект, nowPlaylist: Объект, nowChannellist: Объект, пользователь: Объект, поиск: Объект…}
введен поискВсе
PS: вышеизложенное работает, если я вызываю search() напрямую (который будет иметь один жестко запрограммированный канал) вместо searchAll(). Я также в порядке, если могу напрямую связать несколько вызовов search(), а затем объединить их как часть самого @Effect()searchQuery$
.