2016-04-04 7 views
0

私は2つのボタンを持つコンポーネントを持っています。下の与えられたプランカのデモに従って最初のボタンをクリックすると、イベントが発生し、私のサービス関数はいくつかの値を持つ非同期のサブジェクトを放出します...ボタンをクリックすると、再び.nextイベントを呼び出そうとしていますが、何らかのエラーが発生しています...私はここでプルーカのデモを作っていますhttp://plnkr.co/edit/wpyV7o9JErdQMzGFZ4wp?p=preview ...私はそれをうまく動作しますが、rxjs非同期サブジェクトで2回目の.next()を起動するには?

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'); 
}); 

そして、これは私が非同期の件名を購読している方法です...クリックイベントが初めて正常に動作しますが、私はそれがerror.Somebodyは、このエラーを解決するために私を助けてくださいスロー別のボタンをクリックしたとき。.. 。私はどのように私の非同期サブジェクトを使用して2回目の.next()を呼び出すことができます...ありがとう事前に

答えて

1

それはあなたがcompleteメソッドを呼び出すためです。データフローチェーンが終了し、イベントを受信できなくなります。

+0

をお試しください...(データ毎回の.nextを放出する任意の他の代替はあります)は非同期サブジェクトを使用して呼び出されますか? –

+0

あなたのユースケースは何ですか? AsyncSubjectクラスを使用していますか? –

+0

私はDCLを使用してコンポーネントを動的にロードしており、同じボタンクリックイベントを使用してサービスコールを行っているからです。私がsubjectを使用する場合、コンポーネントがロードされるまでに.next()文が実行されるので、私の場合はasyncを使用することが強制的です –

1

私は初めてのボタンをクリックした場合でも、私はそれがどんな値を放出されていない、完全なメソッドを呼び出してはいけない場合は、この

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'); 
}); 
関連する問題