RxJS・・・まだまだ理解不足ですが
多少判った気がするRxJSですが、見れば見る程判らない。
例えば、自分なりにシンプルな例かもと思った次のコード
------------------------------------------
let intT=0;
const obstest_1 = from([1,2,0,4])
obstest_1.subscribe({
next(x){
let c =intT/x;
console.log(x+" : "+c);
},
error(err) {
console.log(err)
},
complete() {
console.log("fin")
},
})
------------------------------------------
errorはどういう時に表示されるのかと思い見つけたコードが
------------------------------------------
const obs$ = new Observable((sub) => {
sub.next('1');
sub.error(new Error('something wrong'));
console.log("after error") // this message will appear
sub.complete();
});
obs$.subscribe({
next: console.log,
error: console.error,
});
------------------------------------------
これで、ちゃんと'something wrong'とconsole.logに表示されるわけですが、このobs$は一体何を観測可能なものとしてとらえているのか?
以下のようにしても動くので、少し判った気もしますが
------------------------------------------
const obs$ = new Observable((sub) => {
sub.next('1');
sub.error(new Error('something wrong'));
console.log("after error") // this message will appear
sub.complete();
sub.next("2");
console.log("2?")
sub.complete();
sub.next("7");
console.log("7?")
sub.next("17");
console.log("17?")
});
------------------------------------------
sub.next('1');でコンソールログに"1"を表示、sub.error(new Error('something wrong'));でコンソールログに"something wrong"を表示しています。
obs$.subscribeの中での定義ですね。
ただし色々試してみると
・sub.error(new Error('something wrong'));のようにエラーを起こすとそれ以後は処理しない。
ただしsub.メソッド以外のただの"console.log("・・・")"は1度のみ通る
・sub.complete();以下も同じ
また少し判った気がしますが、一口にRxJSと言ってますが、同じとは思えないパターンをひとまとめにしている気もします。
(理解していない今でさえ)使いたいアイデアは色々湧くのですが、まだまだ勉強が要りそうです。
投稿
参考サイト
Observable の エラーハンドリング
https://zenn.dev/mikakane/articles/rxjs_2_errorhandling
読んで判らない時はコードを書いて実験!!(しましたよ)