2016-07-17 9 views
0

私はEventEmitterを持っています。アプリケーションの状態が変更されたことをコンポーネントに通知することをユーザーに通知します。Anger2 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と呼んだ場合、.completeObjectUnsubscribedErrorを投げます。

.errorとは何ですか?このコードでは間違って何をしていますか?

+2

なぜここでerror()とcomplete()を呼び出しますか?コンポーネントの '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 
    }); 
} 
関連する問題