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

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

有人可以解释一下为什么以下代码段会立即输出数字 0 到 6 吗?

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

Output: 0 1 2 3 4 5

您可以从 the source code of 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