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

时间:2015-08-19 19:47:19

标签: javascript rxjs

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

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

输出:0 1 2 3 4 5

1 个答案:

答案 0 :(得分:2)

您可以从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