es6/operator/repeat.js
import { Subscriber } from '../Subscriber';
import { EmptyObservable } from '../observable/EmptyObservable';
/**
* 返回的 Observable 重复由源 Observable 所发出的项的流,最多可以重复 count 次。
*
* <img src="./img/repeat.png" width="100%">
*
* @param {number} [count] 源 Observable 项重复的次数,如果 count 为0则产生一个空的 Observable 。
* @return {Observable} 该 Observable 重复由源 Observable 所发出的项的流,最多可以重复 count 次。
* @method repeat
* @owner Observable
*/
export function repeat(count = -1) {
if (count === 0) {
return new EmptyObservable();
}
else if (count < 0) {
return this.lift(new RepeatOperator(-1, this));
}
else {
return this.lift(new RepeatOperator(count - 1, this));
}
}
class RepeatOperator {
constructor(count, source) {
this.count = count;
this.source = source;
}
call(subscriber, source) {
return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
}
}
/**
* We need this JSDoc comment for affecting ESDoc.
* @ignore
* @extends {Ignored}
*/
class RepeatSubscriber extends Subscriber {
constructor(destination, count, source) {
super(destination);
this.count = count;
this.source = source;
}
complete() {
if (!this.isStopped) {
const { source, count } = this;
if (count === 0) {
return super.complete();
}
else if (count > -1) {
this.count = count - 1;
}
source.subscribe(this._unsubscribeAndRecycle());
}
}
}
//# sourceMappingURL=repeat.js.map