如何在rxjs异步主题中第二次触发.next()?

时间:2016-04-04 14:06:45

标签: angular rxjs5

我有一个有两个按钮的组件。当我按照下面给定的plunker中的演示点击第一个按钮时,它会发出一个事件,我的服务功能会发出一个带有一些值的异步主题...当我点击另一个按钮,我试图再次调用.next事件,但它抛出一些错误...我在这里做了一个pluker演示http://plnkr.co/edit/wpyV7o9JErdQMzGFZ4wp?p=preview ...如果我使用主题它工作正常但我不想使用主题这个案子......

export class ErrorService{
  latestError:AsyncSubject<string> = new AsyncSubject();

  Save() {
    this.latestError.next('form submitted');
    this.latestError.complete();
  }

  Update(){
    this.latestError.next('form updated');
    this.latestError.complete();
  }
}

这是我的服务类,这就是我为异步主题调用.next事件的方式。

  this.service.latestError.subscribe(
err=> {
  console.log('result = '+err);
  this.result=err;
},
err => {
  console.log('err');
},
() => {
  console.log('complete');
});

这就是我订阅异步主题的方式......点击事件第一次正常工作但是当我点击另一个按钮时它会抛出错误。有人请帮我解决这个错误......我怎么能使用我的异步主题第二次调用.next()...提前致谢

2 个答案:

答案 0 :(得分:2)

试试这个

this.service.latestError.subscribe(
err=> {
  this.service.latestError = new AsyncSubject(); // this set isStopped property to false again
  console.log('result = '+err);
  this.result=err;
},
err => {
  console.log('err');
},
() => {
  console.log('complete');
});

答案 1 :(得分:1)

这是因为您在主题上调用了complete方法。它结束了数据流链,您不能再接收事件了。