1. ホーム
  2. javascript

[解決済み] ObservableがついにSubscribeに

2022-05-03 09:15:02

質問

によると この記事 , onCompleteonError の関数を使用します。 subscribe は互いに排他的である。

意味は以下のいずれかです。 onError または onComplete のイベントは、私の subscribe .

エラーが発生しても、情報のスチームが正常に終了しても、実行される必要があるロジックブロックがあります。

のようなものがないか調べたところ finally pythonで が、見つかったのは finally を作成し、それを私が作成したobservableに添付する必要があります。

しかし、このロジックはサブスクライブするときと、ストリームが正常またはエラーで終了した後にのみ行いたい。

何かアイデアはありますか?

解決方法は?

この演算子の現在の "pipable" バリアントは、次のように呼ばれます。 finalize() (RxJS 6以降)。古い、そして現在では非推奨の "patch"演算子は finally() (RxJS 5.5まで)。

と思います。 finalize() 演算子は、実は正しいのです。と言っていますね。

そのロジックは、購読するときだけで、ストリームが終了した後に行います。

というのは問題ないと思います。あなたは、単一の source を使用し finalize() を購読する前に、必要であれば、それを使用します。こうすることで 常に 使用 finalize() :

let source = new Observable(observer => {
  observer.next(1);
  observer.error('error message');
  observer.next(3);
  observer.complete();
}).pipe(
  publish(),
);

source.pipe(
  finalize(() => console.log('Finally callback')),
).subscribe(
  value => console.log('#1 Next:', value),
  error => console.log('#1 Error:', error),
  () => console.log('#1 Complete')
);

source.subscribe(
  value => console.log('#2 Next:', value),
  error => console.log('#2 Error:', error),
  () => console.log('#2 Complete')
);

source.connect();

コンソールに表示されます。

#1 Next: 1
#2 Next: 1
#1 Error: error message
Finally callback
#2 Error: error message

2019年1月:RxJS 6に対応した更新を行いました。