将rxjs管道封装成函数
Encapsulate rxjs pipe into function
我一直在搜索,但找不到答案。
有没有办法把rxjs的管道方法封装成自定义方法?
<observable>.pipe(
filter((num: number) => num % 2 === 0),
take(10)
map((num: number) => num * 10),).subscribe(...);
我想减少到
<observable>.doSomeThingsThatArePiped().subscribe(...);
我知道自定义管道运算符可以简化管道中的内容,但在我的代码中,我有一组多次使用的运算符,我想尽可能地减少它——包括管道。
function yourOperator(source: Observable<T>) {
return source.pipe(
filter((num: number) => num % 2 === 0),
take(10),
map((num: number) => num * 10)
);
}
并像这样使用它:
observable.pipe(
yourOperator
).subscribe(value => console.log(value));
你可以像这样在 pipe
中封装公共链:
function myCustomOperator() { // whatever parameters you need, if any
return pipe(
filter((num: number) => num % 2 === 0),
take(10),
map((num: number) => num * 10)
)
}
那么用法就简单了:
<observable>.pipe(myCustomOperator()).subscribe(...);
我的原始代码是通用的,但这是我为扩展 Observable 原型的真实项目想出的代码。
import { Observable } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
declare module 'rxjs' {
interface Observable<T> {
subscribeUntilDestroyed: (component: any) => Observable<T>;
}
}
interface IDestroyNotifier {
readonly destroyed$: Observable<boolean>;
}
function untilDestroyed(notifier: IDestroyNotifier) {
return <T>(source: Observable<T>) => source.pipe(takeUntil(notifier.destroyed$));
}
Observable.prototype.subscribeUntilDestroyed = function (component) {
return this.pipe(untilDestroyed(component));
};
我一直在搜索,但找不到答案。
有没有办法把rxjs的管道方法封装成自定义方法?
<observable>.pipe(
filter((num: number) => num % 2 === 0),
take(10)
map((num: number) => num * 10),).subscribe(...);
我想减少到
<observable>.doSomeThingsThatArePiped().subscribe(...);
我知道自定义管道运算符可以简化管道中的内容,但在我的代码中,我有一组多次使用的运算符,我想尽可能地减少它——包括管道。
function yourOperator(source: Observable<T>) {
return source.pipe(
filter((num: number) => num % 2 === 0),
take(10),
map((num: number) => num * 10)
);
}
并像这样使用它:
observable.pipe(
yourOperator
).subscribe(value => console.log(value));
你可以像这样在 pipe
中封装公共链:
function myCustomOperator() { // whatever parameters you need, if any
return pipe(
filter((num: number) => num % 2 === 0),
take(10),
map((num: number) => num * 10)
)
}
那么用法就简单了:
<observable>.pipe(myCustomOperator()).subscribe(...);
我的原始代码是通用的,但这是我为扩展 Observable 原型的真实项目想出的代码。
import { Observable } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
declare module 'rxjs' {
interface Observable<T> {
subscribeUntilDestroyed: (component: any) => Observable<T>;
}
}
interface IDestroyNotifier {
readonly destroyed$: Observable<boolean>;
}
function untilDestroyed(notifier: IDestroyNotifier) {
return <T>(source: Observable<T>) => source.pipe(takeUntil(notifier.destroyed$));
}
Observable.prototype.subscribeUntilDestroyed = function (component) {
return this.pipe(untilDestroyed(component));
};