Javascript rxjs中的可重用操作符
基本上,我有这种逻辑,它在所有解析器中都是相同的。我有问题,使其可重用到其他解析器 以下是我的例子:Javascript rxjs中的可重用操作符,javascript,angular,rxjs,Javascript,Angular,Rxjs,基本上,我有这种逻辑,它在所有解析器中都是相同的。我有问题,使其可重用到其他解析器 以下是我的例子: // fetch-abc.resolver.ts @Injectable() export class FetchAbcResolver implements Resolve<any> { constructor(private route: Router, private ngProgress: NgProgress,
// fetch-abc.resolver.ts
@Injectable()
export class FetchAbcResolver implements Resolve<any> {
constructor(private route: Router,
private ngProgress: NgProgress,
private abcService: AbcService) {
}
resolve = (activateRoute: ActivatedRouteSnapshot) => {
this.ngProgress.start()
const slug: string = activateRoute.paramMap.get('slug')
return this.abcService.fetchAbc(slug)
.delay(1000)
.finally(() => this.ngProgress.done())
.catch(error => {
this.route.navigate([ '/404', {
err: 'Error',
msg: `Could not find ${slug}`, error
} ])
return Observable.empty()
})
};
}
但是我被困在了如何组合操作符的问题上如果你使用的是RxJS 5.4和
patch
风格的操作符,你可以使用let
,并生成一个函数,该函数接受你想要配置的参数并附加你想要的链:
const myChain = (x, y) =>
source =>
source.delay(x)
.finally(() => console.log(y))
.catch(error => Observable.empty());
Observable.of(42)
.let(myChain(1000, 'a'))
.subscribe(console.log);
见现场演示:
其中myChain
是一个返回附加运算符的函数。在不使用箭头函数的情况下添加括号可能更明显:
function myChain(x, y) {
return function(source) {
return source.delay(x)
.finally(() => console.log(y))
.catch(error => Observable.empty());
};
};
function myChain(x, y) {
return function(source) {
return source.delay(x)
.finally(() => console.log(y))
.catch(error => Observable.empty());
};
};