は、そのような正確ことはできませんが、基本的に行くには2つの選択肢があり、両方がSubject
の使用を伴う:
1)データ
const obs$ = Rx.Observable.of("stream1");
const subj$ = new Rx.Subject();
Rx.Observable.merge(obj$, subj$)
.subscribe(
x => console.log('Next: ' + x),
x => console.log('Error: ' + x),
() => console.log('Complete')
);
subj$.next("stream2");
subj$.next("stream3");
のマニュアル発光
ただし、このケースでは、Subject
は一度も完了しないため、の完全なは呼び出されません。したがって、complete
ハンドラがトリガされる必要がある場合は、最後に手動のsubj$.complete();
を追加する必要があります。被験者Subject
は、基本的にデータのみを伝播する「プロキシ」として作用するこのシナリオでは
const obs$ = Rx.Observable.of("stream1");
const subj$ = new Rx.Subject();
subj$.subscribe(
x => console.log('Next: ' + x),
x => console.log('Error: ' + x),
() => console.log('Complete')
);
obs$.subscribe(x => subj$.next(x));
const obs2$ = Rx.Observable.of("stream2");
obs2$.subscribe(x => subj$.next(x));
スルー
2)マルチキャスト、ないエラー - または完全な、トリガー。
どちらのソリューションも本当に「良い」わけではありませんが、ご使用のケースを少し詳しく説明することはできますが、複雑な回避策がない適切な解決策があるはずです。あなたはそれにデータを放出し、でそれを購読することができ、それは方法で動作します -
あなただけ連続してデータを提供する方法を持つようにしたい場合は、永遠の観測を形成するには、BehaviorSubject
を使用する必要があります同じ時間:ここで
class Service {
public data$ = new BehaviorSubject(someInitialDataOrNull);
public getData() {
makeSomeHttpCall()
.subscribe(data => data$.next(data));
}
}
class Component {
constructor() {
theService.data$.subscribe(data => console.log(data));
}
}
は
おかげであなたの答えのためにたくさん(それは基本的にはまだ同じように
onNext
は電気ショック療法...、今next
であるために期待する働き)BehaviorSubject
の古いドキュメントへのリンクです。私の考えは、サービスがapiや他のソースから来るデータを観測可能に提供するということでした。私の他のコンポーネントは、それを購読しているので、最初から観測可能である必要があり、データが利用可能なときには、他のコンポーネントにフィードする必要があります。この目的のために正しいパターンは何でしょうか? – LeniM私は答えを更新しました – olsn
ありがとうございます。あなたはそれを釘付けにした! – LeniM