вернуть объект с внутренней карты

Спрашивая это как продолжение этого (Как вернуть наблюдаемое из подписки), так как принятое решение не решило мой вариант использования Вот мой код

  @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$.


person ishandutta2007    schedule 13.04.2017    source источник


Ответы (1)


Я постараюсь опубликовать ответ, но у меня нет полных требований, поэтому это своего рода предположение.

   let nowChannellist$ = new Rx.Observable.of([{channelId:1}, {channelId:2}]);

   nowChannellist$.switchMap(channels => {
     let channels$ = channels.map(channel => {
       return this.search(chanel);
     });
     return Rx.Observable.forkJoin(channels$);
   })
   .subscribe(x=>console.log(x))
person Julia Passynkova    schedule 25.04.2017