Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript rxjs中的可重用操作符_Javascript_Angular_Rxjs - Fatal编程技术网

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());
  };
};