为什么 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
有人可以解释一下为什么以下代码段会立即输出数字 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