首页 > 解决方案 > 为什么我不能通过管道传输 BehaviourSubject?

问题描述

我不确定为什么subscribe可以使用BehaviourSubject但不能使用pipe.

例如,下面的代码打印出来?

subscribe: 123
subscribe: 456

为什么它也不打印

pipe: 123
pipe: 456

代码:

import {tap } from 'rxjs/operators';
import { BehaviorSubject } from 'rxjs';

const subject = new BehaviorSubject(123);
subject.subscribe(p => console.log("subscribe: " + p));
subject.pipe(
  tap(p => {console.log("pipe:" + p);})
)
subject.next(456);

标签: rxjs

解决方案


subject.pipe(
  tap(p => {console.log("pipe:" + p);})
)

你只是在这里利用 observable。您需要单独订阅此主题才能使点击生效。以下代码将为您提供所需的控制台日志:

subject.pipe(
  tap(p => {console.log("pipe:" + p);})
).subscribe();

如果您只能订阅一次,那么您可以尝试以下代码:

const abc$ = new BehaviorSubject(123).asObservable().pipe(
  tap((val) => console.log('pipe: ', val))
);
abc$.subscribe((val) => console.log('subscribe: ', val));

推荐阅读