如何在管道运算符时返回`forkJoin` observable

时间:2018-05-29 02:28:00

标签: angular rxjs ngxs

在我使用这个解决方案之前,我的工作正常:

resolve() {
    return forkJoin(
        this.getData1(),
        this.getData2(),
        this.getData3()
    );
}

现在我必须做一些实际上不起作用的事情:

  resolve() {
    return this.actions$
      .pipe(
        ofActionSuccessful(SomeSctonSuccess),
        forkJoin(
           this.getData1(),
           this.getData2(),
           this.getData3()
        )
      );
    }

因为我遇到了这个错误:

  

类型' Observable< [any,any,any,any]>'不可分配   参数类型' OperatorFunction'。类型   ' Observable< [any,any,any,any]>'不提供签名匹配   '(来源:可观察):可观察的'。

任何想法如何解决?

现在我注意到forkJoin发生ofActionSuccessful(SomeSctonSuccess)之后才回复{{1}}

2 个答案:

答案 0 :(得分:2)

使用exhaustMap运算符。它映射到内部observable,忽略其他值,直到observable完成

import { forkJoin } from 'rxjs';
import { exhaustMap } from 'rxjs/operators';

resolve() {
    return this.actions$
      .pipe(
        ofActionSuccessful(SomeSctonSuccess),
        exhaustMap(() => {
         return forkJoin(
             this.getData1(),
             this.getData2(),
             this.getData3()
           )
       })

      );
    }

答案 1 :(得分:2)

感谢@Sajeetharan,期待这个url最终使用exhaustMap

  resolve() {
    return this.actions$.pipe(
      ofActionSuccessful(LoadOnPremHostSuccess),
      exhaustMap(() => {
        return forkJoin(
          this.getData1(),
           this.getData2(),
           this.getData3()
        );
      })
    );

}