tap () не запускается в RXJS Pipe - PullRequest
       9

tap () не запускается в RXJS Pipe

0 голосов
/ 05 сентября 2018

У меня есть способы сделать то же самое, хотя я предпочитаю первый. Но первый подход, похоже, не работает. (tap() не срабатывает)

// does not work
this.actions$.pipe(
    ofType(LayoutActions.Types.CHANGE_THEME),
    takeUntil(this.destroyed$),
    tap(() => {
        console.log('test')
    }),
);
// works
this.actions$.ofType(LayoutActions.Types.CHANGE_THEME).subscribe(() => {
    console.log('test')
});

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Представьте себе трубы RxJS как настоящие физические трубы с клапаном на конце. Каждая труба будет «модифицировать» жидкость, которая течет через нее, но пока клапан на конце закрыт, ничто никогда не будет течь.

Итак, что вам нужно, это открыть клапан в конце. Это делается путем подписки на наблюдаемую трубу. Самое простое решение:

this.actions$.pipe(
    ofType(LayoutActions.Types.CHANGE_THEME),
    takeUntil(this.destroyed$),
    tap(() => {
        console.log('test')
    }),
).subscribe(_ => console.log("water is flowing!"));
0 голосов
/ 05 сентября 2018

pipe создает новый Observable, поэтому вы должны присвоить его, а затем подписаться на это. В вашем случае вы пропускаете pipe возврат, таким образом, вы получаете простой, неизмененный Observable без каких-либо дополнительных действий канала.

Также помните, что, скорее всего, вам придется подписаться, чтобы pipetap) работали.

1011 * попробовать *

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')
});
...