RXJS Pipe中未触发tap()

时间:2018-09-05 15:29:35

标签: angular rxjs reactive-programming ngrx

尽管我更喜欢第一个,但我必须采取相同的方法。但是第一种方法似乎无效。 (<strong></strong>未触发)

tap()

2 个答案:

答案 0 :(得分:11)

想象一下RxJS管道,就像实际的物理管道一样,末端带有阀门。每个管道都会“修改”流过的液体,但是只要关闭末端的阀门,就不会有任何流动。

因此,您需要的是最后打开阀门。这是通过订阅来完成的。最简单的解决方案是:

this.actions$.pipe(
    ofType(LayoutActions.Types.CHANGE_THEME),
    takeUntil(this.destroyed$),
    tap(() => {
        console.log('test')
    }),
).subscribe(_ => console.log("water is flowing!"));

答案 1 :(得分:3)

pipe创建新的Observable,因此您必须分配它,然后订阅该名称。在您的情况下,您将省略pipe的返回,从而最终得到未经修改的简单Observable,而无需执行任何额外的管道操作。

还请记住,您很有可能必须订阅才能使pipe(和tap)正常工作。

尝试

this.actions$=this.actions$.pipe(
    tap(()=>console.log("First tap")),
    ofType(LayoutActions.Types.CHANGE_THEME),
    takeUntil(this.destroyed$),
    tap(() => {
        console.log('Last tap')
    }),
);

this.actions$.subscribe(() => {
    console.log('subscribtion')
});