2016-07-17 3 views
0

У меня есть EventEmitter, которые информируют пользователя, который уведомляет компонент о том, что состояние приложения изменилось.Angular2 EventEmitter не завершается после вызова .error

Это событие сообщает, что пользователь, который пытается аутентифицироваться, прошел успешно.

private emitAuthStatus(success: boolean) { 
    if (success) { 
     this.locationWatcher.emit({ 
      authenticated: this.authenticated, 
      token: this._authData.token, 
      expires: this.expires 
     }); 
    } else { 
     this.locationWatcher.error(); 
    } 

    this.locationWatcher.complete(); 
} 

Теперь, когда я звоню .emit с последующим .complete все работает должным образом. Но если я позвоню .error, то .complete выбрасывает ObjectUnsubscribedError.

Что такое .error, для чего я делаю неправильно в этом коде?

+2

Но почему вы называете ошибку() и завершаете() здесь? вам следует позвонить/использовать их там, где вы подписываетесь на «locationWatcher observer» в компоненте. – micronyks

+0

Имеет ли ошибка, что что-то пошло не так с событием, или что событие вызывает особый тип события? Когда я смотрю на документацию, похоже, что возникает особый тип событий, но, конечно же, это не должно означать, что «EventEmitter» больше не подписывается? – Linvi

+1

Я не думаю, что 'error()' и 'complete()' предполагается использовать вообще. 'EventEmitter' в настоящее время расширяет' Observable', но это деталь реализации и, как ожидается, изменится в любой момент без какой-либо фазы устаревания. Используйте 'EventEmitter' только для' @Output() 'только в компонентах и ​​используйте только метод' emit() '. –

ответ

0

Я изменил свой код, чтобы не использовать .error и .complete, которые не предназначены для использования в качестве транзитной информации.

private emitAuthStatus() { 
    this.locationWatcher.emit({ 
     // The .authenticated allow us to know if the EventEmitter is a success 
     authenticated: this.authenticated, 
     token: this._authData.token, 
     expires: this.expires 
    }); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^