2016-10-07 2 views
1

Я пытаюсь использовать оператор «take» в своем коде (обучение rxjs), но он не отправляет верхние 5, как я хочу. мой простой код ниже, кто-нибудь знает, как помочь?rxjs и угловой 2 и использование оператора «take»

countries: Observable<Country[]>; 

private searchTerms = new Subject<string>(); 

this.countries = this.searchTerms.debounceTime(300).distinctUntilChanged().switchMap( 
      searchTerm => searchTerm ? this.countrySearchService.search(searchTerm) : observable.of<Country[]>([])) 
      .take(5); 
+0

Зачем брать (5) и не брать (1)? Вы пытаетесь получить последние 5 результатов или последние 5 турниров в массиве? – Meir

+0

Я хотел бы взять первые 5 стран в массиве. –

ответ

0

После прочтения вашего комментария, я понимаю, что вам нужны первые 5 стран. Теперь обратите внимание, что ваш наблюдаемый испускает массивы стран, а не стран. Причина, по которой вы используете Observable.of вместо Observable.from. Таким образом, правильный синтаксис должен быть:

this.countries = this.searchTerms.debounceTime(300).distinctUntilChanged().switchMap( 
     searchTerm => searchTerm ? this.countrySearchService.search(searchTerm) : observable.from<Country[]>([])) 
     .take(5); 

Если вы хотите образец, демонстрируют различные варианты использования, взглянуть на this jsbin.

+0

Выдающийся, ваше объяснение и фрагмент кода облегчили понимание. Бесконечно благодарен. –

Смежные вопросы