为什么在Rx.js中传递给interval的Infinity不会永远等待?

Why does Infinity passed to interval does not wait forever in Rx.js?

本文关键字:Infinity 永远等待 interval Rx js 为什么      更新时间:2023-09-26

谁能解释一下为什么下面的代码段立即输出数字0到6 ?

 Rx.Observable.interval(1/0).take(6).forEach(x => console.log(x));

输出:0 1 2 3 4 5

您可以从RxJS的源代码中看到,Observable.interval期望(并使用)其输入为整数:

module Rx {
    export interface ObservableStatic {
        /**
         *  Returns an observable sequence that produces a value after each period.
         *
         * @example
         *  1 - res = Rx.Observable.interval(1000);
         *  2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout);
         *
         * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds).
         * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used.
         * @returns {Observable} An observable sequence that produces a value after each period.
         */
        interval(period: number, scheduler?: IScheduler): Observable<number>;
    }
}

和Javascript中的

(1/0) === Infinity

Infinity转换为整数时为零:

(Infinity | 0) === 0