Как запустить .next() во второй раз в асинхронной теме rxjs?

У меня есть компонент с двумя кнопками. Когда я нажимаю первую кнопку в соответствии с демонстрацией в данном плункере ниже, он генерирует событие, и моя сервисная функция испускает асинхронную тему с некоторыми значениями... Когда я нажимаю другую кнопку, я я пытаюсь снова вызвать событие .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 () во второй раз, используя мою асинхронную тему... Заранее спасибо


person Raja Reddy    schedule 04.04.2016    source источник


Ответы (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');
});
person bpena    schedule 05.07.2016

Это потому, что вы вызываете метод complete для субъекта. Это завершает цепочку потоков данных, и вы больше не можете получать события.

person Thierry Templier    schedule 04.04.2016
comment
Если я не вызываю полный метод, он не выдает никаких значений, даже если я нажимаю кнопку в первый раз... Есть ли другая альтернатива для выдачи данных каждый раз, когда .next() вызывается с использованием асинхронной темы? - person Raja Reddy; 04.04.2016
comment
Каков ваш вариант использования? Необходимо ли использовать класс AsyncSubject? - person Thierry Templier; 04.04.2016
comment
Да, потому что я динамически загружаю компонент с помощью DCL и делаю вызов службы, используя одно и то же событие нажатия кнопки. если я использую тему, к моменту загрузки компонента выполняется оператор .next(), поэтому мне обязательно использовать асинхронность в моем случае - person Raja Reddy; 04.04.2016