Spec-Zone.ru › RxJS

delayWhen

function stable operator

Откладывает эмиссию элементов из исходной Observable на заданный промежуток времени, определяемый эмиссиями другой Observable.

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

Параметры

delayDurationSelector (value: T, index: number) => ObservableInput<any>
subscriptionDelay Observable<any>

Возвращает

MonoTypeOperatorFunction<T>

delayWhen(delayDurationSelector: (value: T, index: number) => ObservableInput<any>): MonoTypeOperatorFunction<T>

Параметры

delayDurationSelector (value: T, index: number) => ObservableInput<any>

Возвращает

MonoTypeOperatorFunction<T>

Описание

Это как delay, но продолжительность отсрочки определяется второй Observable.

delayWhen marble diagram

delayWhen оператор сдвигает каждый выпущенный элемент из исходной Observable на промежуток времени, определяемый другой Observable. Когда исходная Observable выпускает значение, функция delayDurationSelector вызывается со значением, выпущенным исходной Observable, в качестве первого аргумента для delayDurationSelector. Функция delayDurationSelector должна возвращать ObservableInput, которая внутренне преобразуется в Observable, называемую "Observable продолжительности".

Значение исходной Observable выпускается на выходной Observable только тогда, когда "Observable продолжительности" выпускает (дает) любое значение. После этого "Observable продолжительности" отписывается.

До RxJS V7 завершение "Observable продолжительности" вызывало выпуск значения исходной Observable в выходной Observable, но в RxJS V7 это больше не так.

Только уведомления next (из "Observable продолжительности") вызывают передачу значений из исходной Observable в выходной Observable. Если "Observable продолжительности" выпускает только уведомление complete (без next), значение, выпущенное исходной Observable, никогда не попадет в выходной Observable — оно будет проглочено. Если "Observable продолжительности" возвращает ошибку, ошибка будет передана в выходной Observable.

По желанию, delayWhen принимает второй аргумент, subscriptionDelay, который является Observable. Когда subscriptionDelay выпускает своё первое значение или завершается, исходная Observable подписывается и начинает работать, как описано в предыдущем абзаце. Если subscriptionDelay не предоставлен, delayWhen подпишется на исходную Observable, как только будет подписана выходная Observable.

Пример

Отсрочка каждого клика на случайный промежуток времени от 0 до 5 секунд

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

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

См. также

  • delay
  • throttle
  • throttleTime
  • debounce
  • debounceTime
  • sample
  • sampleTime
  • audit
  • auditTime

© 2015–2022 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors.
Code licensed under an Apache-2.0 License. Documentation licensed under CC BY 4.0.
https://rxjs.dev/api/operators/delayWhen

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API