Rxjs 如何将可观察对象转换为ReplaySubject?

Rxjs 如何将可观察对象转换为ReplaySubject?,rxjs,rxjs5,Rxjs,Rxjs5,下面是我现在将可观察对象转换为ReplaySubject: const subject=new Rx.ReplaySubject(1); 可观察。订阅(e=>subject.next(e)); 这是进行转换的最佳方法,还是有更惯用的方法?如果您想传递所有3种类型的通知,因为主题的行为已经像一个观察者,那么您可以只使用observable.subscribe(subject)。例如: let subject = new ReplaySubject(); subject.subscribe(

下面是我现在将
可观察对象
转换为
ReplaySubject

const subject=new Rx.ReplaySubject(1);
可观察。订阅(e=>subject.next(e));

这是进行转换的最佳方法,还是有更惯用的方法?

如果您想传递所有3种类型的通知,因为主题的行为已经像一个观察者,那么您可以只使用
observable.subscribe(subject)
。例如:

let subject = new ReplaySubject();
subject.subscribe(
  val => console.log(val),
  undefined, 
  () => console.log('completed')
);

Observable
  .interval(500)
  .take(5)
  .subscribe(subject);

setTimeout(() => {
  subject.next('Hello');
}, 1000)
见现场演示:


然而,这有一个重要的后果。因为您已经订阅了源Observable,所以您将其从“冷”改为“热”(在您的用例中可能并不重要)。

就像第一个答案一样,因为主体也是一个观察者

const subject = new Rx.ReplaySubject(1);
observable.subscribe(subject);

如果你真的想剃掉字符,我想你可以做
observable.subscribe(subject.next)
。但是如果你有可观察的,为什么你需要创造主体呢?如果您只是想要重播功能,请使用该方法。实际上,您甚至可以执行
可观察。订阅(主题)
,而不使用
。下一步
)只要注意,一旦可观察完成,主题也是如此。@jornsharpe
Observable.replay
似乎在RxJS v5中不可用。对于RxJS版本6.4.0,这将实现以下技巧:
Observable.pipe(shareReplay(1))
,它相当于(从6.4.0开始)Observable.pipe(shareReplay({bufferSize:1,refCount:false}))。有关
refcount
的详细信息,请查看此处:上述shareReplay注释的文档