0

我有一个有两个按钮的组件。当我根据下面给定 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 () 第二次使用我的异步主题...在此先感谢

4

2 回答 2

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');
});
于 2016-07-05T02:58:10.360 回答
1

这是因为您调用了complete该主题的方法。它结束了数据流链,您将无法再接收事件。

于 2016-04-04T14:16:58.400 回答