Skip to content

Commit 866af37

Browse files
committed
feat(subscribeOn): add higher-order lettable version of subscribeOn
1 parent feb0f5a commit 866af37

File tree

3 files changed

+39
-16
lines changed

3 files changed

+39
-16
lines changed

src/operator/subscribeOn.ts

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import { Operator } from '../Operator';
1+
22
import { IScheduler } from '../Scheduler';
3-
import { Subscriber } from '../Subscriber';
43
import { Observable } from '../Observable';
5-
import { TeardownLogic } from '../Subscription';
6-
import { SubscribeOnObservable } from '../observable/SubscribeOnObservable';
4+
import { subscribeOn as higherOrder } from '../operators';
75

86
/**
97
* Asynchronously subscribes Observers to this Observable on the specified IScheduler.
@@ -17,16 +15,5 @@ import { SubscribeOnObservable } from '../observable/SubscribeOnObservable';
1715
* @owner Observable
1816
*/
1917
export function subscribeOn<T>(this: Observable<T>, scheduler: IScheduler, delay: number = 0): Observable<T> {
20-
return this.lift(new SubscribeOnOperator<T>(scheduler, delay));
21-
}
22-
23-
class SubscribeOnOperator<T> implements Operator<T, T> {
24-
constructor(private scheduler: IScheduler,
25-
private delay: number) {
26-
}
27-
call(subscriber: Subscriber<T>, source: any): TeardownLogic {
28-
return new SubscribeOnObservable(
29-
source, this.delay, this.scheduler
30-
).subscribe(subscriber);
31-
}
18+
return higherOrder(scheduler, delay)(this);
3219
}

src/operators/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export { race } from './race';
2626
export { reduce } from './reduce';
2727
export { refCount } from './refCount';
2828
export { scan } from './scan';
29+
export { subscribeOn } from './subscribeOn';
2930
export { switchAll } from './switchAll';
3031
export { switchMap } from './switchMap';
3132
export { takeLast } from './takeLast';

src/operators/subscribeOn.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Operator } from '../Operator';
2+
import { IScheduler } from '../Scheduler';
3+
import { Subscriber } from '../Subscriber';
4+
import { Observable } from '../Observable';
5+
import { TeardownLogic } from '../Subscription';
6+
import { SubscribeOnObservable } from '../observable/SubscribeOnObservable';
7+
import { MonoTypeOperatorFunction } from '../interfaces';
8+
9+
/**
10+
* Asynchronously subscribes Observers to this Observable on the specified IScheduler.
11+
*
12+
* <img src="./img/subscribeOn.png" width="100%">
13+
*
14+
* @param {Scheduler} scheduler - The IScheduler to perform subscription actions on.
15+
* @return {Observable<T>} The source Observable modified so that its subscriptions happen on the specified IScheduler.
16+
.
17+
* @method subscribeOn
18+
* @owner Observable
19+
*/
20+
export function subscribeOn<T>(scheduler: IScheduler, delay: number = 0): MonoTypeOperatorFunction<T> {
21+
return function subscribeOnOperatorFunction(source: Observable<T>): Observable<T> {
22+
return source.lift(new SubscribeOnOperator<T>(scheduler, delay));
23+
};
24+
}
25+
26+
class SubscribeOnOperator<T> implements Operator<T, T> {
27+
constructor(private scheduler: IScheduler,
28+
private delay: number) {
29+
}
30+
call(subscriber: Subscriber<T>, source: any): TeardownLogic {
31+
return new SubscribeOnObservable(
32+
source, this.delay, this.scheduler
33+
).subscribe(subscriber);
34+
}
35+
}

0 commit comments

Comments
 (0)