rxjs debounceTime на тему

1

Выделите фрагмент кода следующим образом:

const hoverQueue$ = new Rx.Subject()
    .debounceTime(1000)
    .subscribe(() => {
        console.log('subject')
});

const callback = () => {
    hoverQueue$.next(true)
}

Кажется, что это не работает. Вместо того, чтобы мои события задерживались на 1 секунду и получая только последнее испущенное значение, все они проходят, как будто debounceTime не существует. такое же поведение происходит с задержкой, похоже, не работает. Кажется, он работает как можно больше на наблюдаемых. callback - это обратный вызов, вызванный другой библиотекой, которую я использую.

Не уверен, что я что-то пропустил, или если я делаю то, что не должно быть сделано, не можете найти много об этом в Интернете.

Ниже приведена скрипка с примером для демонстрации

вот скрипка с rxjs 5.4.1, что и работает https://jsfiddle.net/theya222/2nhu1ka7/

и здесь приведена последняя версия rxjs https://jsfiddle.net/theya222/j1uLw80d/

Спасибо

Теги:
rxjs
rxjs5

1 ответ

1
Лучший ответ

hoverQueue$ является результатом выполнения subscribe на Observable. Следовательно, hoverQueue$ является Subcription не наблюдаемой, а Subscription не имеет next метода.

Что вам нужно сделать, так это

const subj = new Rx.Subject();
const hoverQueue$ = subj.debounceTime(1000);

hoverQueue$.subscribe(() => {
        console.log('subject')
});

const callback = () => {
    subj.next(true)
}

если обратный вызов является

обратный вызов, вызванный другой библиотекой

взгляните на метод/функцию bindCallback определенную с помощью Observable.

  • 2
    debounceTime должен быть немного дальше вниз, иначе hoverQueue$ является Observable а не Subject . да здравствует машинопись
  • 0
    @ggradnig вы правы - ответ отредактирован - да здравствует машинопись

Ещё вопросы

Сообщество Overcoder
Наверх
Меню