rxjs дроссель this.durationSelector не является функцией

Я пытаюсь throttle ngrx хранить события обновления действий со следующим кодом

import 'rxjs/add/operator/throttle'
import { Dispatcher, Store } from '@ngrx/store';
...
static get parameters() {
  return [[Dispatcher]];
}
constructor(actions$) {
...

this.actions$
  .filter(action => action.type === this.Actions[`LOAD_USERS_REQUEST`])
  .throttle(1000 /* ms */)
  .subscribe(() =>
    ...
  );

это выдает мне ошибку

в ThrottleSubscriber.tryDurationSelector (throttle.js:80) TypeError: this.durationSelector не является функцией

Когда я заменяю .throttle(1000) на .throttle(() => 1000), выдается другая ошибка, которая ясно показывает, что дроссель ожидает функцию, но не ту, которую я предоставляю. Но мне интересно, почему, потому что в документации говорится, что дроссель ожидает числовое значение.

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/throttle.md


person select    schedule 18.10.2016    source источник
comment
добавь это в свой импорт import 'rxjs/add/operator/throttle'   -  person Fabio Antunes    schedule 18.10.2016
comment
конечно, я так и сделал, иначе он бы разбился еще до того, как смог бы включить функцию дроссельной заслонки.   -  person select    schedule 18.10.2016
comment
пробовал дроссельWithTimeout вместо дросселя?   -  person jmachnik    schedule 18.10.2016


Ответы (1)


Страница документации, на которую вы ссылаетесь, https://github.com/Reactive-Extensions/RxJS: связанный с RxJS 4. Поскольку вы используете Angular2, вы используете RxJS 5.

Оператор throttle() ожидает в качестве аргумента Observable или Обещание.

Оператор throttleTime() принимает в качестве аргумента время в миллисекунды.

Поэтому вы должны использовать throttleTime(1000).

Обратите внимание, что использование .throttle(() => 1000) сильно отличается. Вы передаете анонимную функцию, которая напрямую возвращает 1000 вместо 1000 числа. Вот почему он выдает другую ошибку.

person martin    schedule 18.10.2016
comment
Дополнительное примечание для поиска: это одинаково хорошо применимо к debounce() и debounceTime() в RxJS 5. - person Jameson; 13.03.2017
comment
см. также learnrxjs.io/operators/filtering/throttletime.html - person Alendorff; 18.09.2017