Как создать Observable, а затем ограничить подписку - PullRequest
0 голосов
/ 28 января 2019

В RxJS фильтры, такие как auditTime и throttleTime, испускают Observable (по-разному) по истечении определенной продолжительности.Мне нужно выдать Observable и , а затем подождать некоторое время, прежде чем выдать следующее значение.

В моем случае я работаю в Angular.Например, этот код:

this.fooService$.pipe(throttleTime(10000)).subscribe(() => this.doSomething());

не выполнит то, что мне нужно, потому что выброс происходит в конце продолжительности.Мне нужно наоборот: эмиссия происходит, а затем задержка.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Это должно работать и делать операции в tap()

this.fooService$.pipe(
tap(() => this.doSomething()),
switchMap(()=>timer(10000))
)
.subscribe();
0 голосов
/ 28 января 2019

Как насчет использования классической функции тайм-аута?

this.fooService$.subscribe( () =>
    setTimeout(() => { this.doSomething(); }, 3000)
);

РЕДАКТИРОВАТЬ:

Ссылаясь на ваш комментарий, сделайте следующее на вашей излучающей стороне (только пример):

// RxJS v6+
import { timer, BehaviorSubject } from 'rxjs';

// timer starts with a delay of 1000 ms and then emits every 2000 ms
const source = timer(1000, 2000);
const emitter: BehaviorSubject<number> = new BehaviorSubject(-1);

const subscribe = source.subscribe( value => this.emitter.next(value));
...