import { asyncScheduler } from '../scheduler/async'; | |
import { MonoTypeOperatorFunction, SchedulerLike } from '../types'; | |
import { delayWhen } from './delayWhen'; | |
import { timer } from '../observable/timer'; | |
/** | |
* Delays the emission of items from the source Observable by a given timeout or | |
* until a given Date. | |
* | |
* <span class="informal">Time shifts each item by some specified amount of | |
* milliseconds.</span> | |
* | |
*  | |
* | |
* If the delay argument is a Number, this operator time shifts the source | |
* Observable by that amount of time expressed in milliseconds. The relative | |
* time intervals between the values are preserved. | |
* | |
* If the delay argument is a Date, this operator time shifts the start of the | |
* Observable execution until the given date occurs. | |
* | |
* ## Examples | |
* | |
* Delay each click by one second | |
* | |
* ```ts | |
* import { fromEvent, delay } from 'rxjs'; | |
* | |
* const clicks = fromEvent(document, 'click'); | |
* const delayedClicks = clicks.pipe(delay(1000)); // each click emitted after 1 second | |
* delayedClicks.subscribe(x => console.log(x)); | |
* ``` | |
* | |
* Delay all clicks until a future date happens | |
* | |
* ```ts | |
* import { fromEvent, delay } from 'rxjs'; | |
* | |
* const clicks = fromEvent(document, 'click'); | |
* const date = new Date('March 15, 2050 12:00:00'); // in the future | |
* const delayedClicks = clicks.pipe(delay(date)); // click emitted only after that date | |
* delayedClicks.subscribe(x => console.log(x)); | |
* ``` | |
* | |
* @see {@link delayWhen} | |
* @see {@link throttle} | |
* @see {@link throttleTime} | |
* @see {@link debounce} | |
* @see {@link debounceTime} | |
* @see {@link sample} | |
* @see {@link sampleTime} | |
* @see {@link audit} | |
* @see {@link auditTime} | |
* | |
* @param {number|Date} due The delay duration in milliseconds (a `number`) or | |
* a `Date` until which the emission of the source items is delayed. | |
* @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for | |
* managing the timers that handle the time-shift for each item. | |
* @return A function that returns an Observable that delays the emissions of | |
* the source Observable by the specified timeout or Date. | |
*/ | |
export function delay<T>(due: number | Date, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction<T> { | |
const duration = timer(due, scheduler); | |
return delayWhen(() => duration); | |
} | |