Skip to content

Latest commit

 

History

History
42 lines (29 loc) · 3.76 KB

delayWhen.md

File metadata and controls

42 lines (29 loc) · 3.76 KB

delayWhen

Когда внешний поток отправит значение, delayWhen отправит значение внутреннего потока.

Сигнатура

delayWhen<T>(delayDurationSelector: (value: T, index: number) => Observable<any>, subscriptionDelay?: Observable<any>): MonoTypeOperatorFunction<T>

Описание

Это похоже на delay, но временной промежуток длительности задержки определяется вторым потоком. delayWhen сдвигает время каждое отправленное потоком значение на временной промежуток, определённый другим потоком. Когда источник отправляет значение, вызывается функция delayDurationSelector со значением источника в качестве аргумента и должна возвращать значение потока, называемое "длительность" ("duration") потока. Значение источника отправляется на выводе потока только в том случае, если параметр потока отправляет значение или завершает период времени. Завершение работы нотификатора, вызывающего отправку исходного значения, является недействительным явлением и в последующих версиях будет удалено. Опционально, delayWhen принимает второй аргумент, subscriptionDelay, которая является потоком. Когда subscriptionDelay отправляет своё первое значение или завершается, источник потока подписывается и начинает вести себя так, как описано в предыдущей строке. Если subscriptionDelay не предоставляется, delayWhen подписывается на источник потока, как только выходные данные потока подписываются.

Параметры

Название Описание
delayDurationSelector Функция, которая возвращает значение потока для каждого значения, отправленного потоком, которое затем используется для задержки выдачи этого элемента на выходе потока до тех пор, пока объект поток, возвращаемый из этой функции, не отправит значение.
subscriptionDelay Опционально. По умл.: undefined.
Поток, который вызывает подписку на источник потока, как только он отправляет любое значение.

Примеры

Задержка каждого клика на случайное количество времени, от 0 до 5 секунд.

import { fromEvent, interval } from 'rxjs';
import { delayWhen } from 'rxjs/operators';

const clicks = fromEvent(document, 'click');
const delayedClicks = clicks.pipe(
  delayWhen(event => interval(Math.random() * 5000)),
);
delayedClicks.subscribe(x => console.log(x));

Полезные ссылки