diff options
Diffstat (limited to 'node_modules/rxjs/src/internal/operators/timeInterval.ts')
| -rw-r--r-- | node_modules/rxjs/src/internal/operators/timeInterval.ts | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/operators/timeInterval.ts b/node_modules/rxjs/src/internal/operators/timeInterval.ts new file mode 100644 index 0000000..6a58ab2 --- /dev/null +++ b/node_modules/rxjs/src/internal/operators/timeInterval.ts @@ -0,0 +1,67 @@ +import { asyncScheduler } from '../scheduler/async'; +import { SchedulerLike, OperatorFunction } from '../types'; +import { operate } from '../util/lift'; +import { createOperatorSubscriber } from './OperatorSubscriber'; + +/** + * Emits an object containing the current value, and the time that has + * passed between emitting the current value and the previous value, which is + * calculated by using the provided `scheduler`'s `now()` method to retrieve + * the current time at each emission, then calculating the difference. The `scheduler` + * defaults to {@link asyncScheduler}, so by default, the `interval` will be in + * milliseconds. + * + * <span class="informal">Convert an Observable that emits items into one that + * emits indications of the amount of time elapsed between those emissions.</span> + * + *  + * + * ## Example + * + * Emit interval between current value with the last value + * + * ```ts + * import { interval, timeInterval } from 'rxjs'; + * + * const seconds = interval(1000); + * + * seconds + * .pipe(timeInterval()) + * .subscribe(value => console.log(value)); + * + * // NOTE: The values will never be this precise, + * // intervals created with `interval` or `setInterval` + * // are non-deterministic. + * + * // { value: 0, interval: 1000 } + * // { value: 1, interval: 1000 } + * // { value: 2, interval: 1000 } + * ``` + * + * @param scheduler Scheduler used to get the current time. + * @return A function that returns an Observable that emits information about + * value and interval. + */ +export function timeInterval<T>(scheduler: SchedulerLike = asyncScheduler): OperatorFunction<T, TimeInterval<T>> { + return operate((source, subscriber) => { + let last = scheduler.now(); + source.subscribe( + createOperatorSubscriber(subscriber, (value) => { + const now = scheduler.now(); + const interval = now - last; + last = now; + subscriber.next(new TimeInterval(value, interval)); + }) + ); + }); +} + +// TODO(benlesh): make this an interface, export the interface, but not the implemented class, +// there's no reason users should be manually creating this type. + +export class TimeInterval<T> { + /** + * @deprecated Internal implementation detail, do not construct directly. Will be made an interface in v8. + */ + constructor(public value: T, public interval: number) {} +} |
