カテゴリー
【Angular活用講座】Rxjsでエラーレスポンスを上手にリトライするためのサービスを作る
※ 当ページには【広告/PR】を含む場合があります。
2022/05/10
2022/10/05
Rxjsで定期実行スケジューラーの作成する
intervalオペレーターとtimerオペレーター
setInterval(() => {
//...定期実行したい処理を記述
}, 1000);
const { timer } = require('rxjs');
const timer$ = timer(1, 5000);
timer$.subscribe((val) => console.log(val));
const { timer, switchMap } = require('rxjs');
//...中略
this.myInterval$ = timer(1, 5000).pipe(
switchMap(_ => http.get('https://hoge.com/api'))
);
ストリームをフェイルセーフにする
const { timer, switchMap, retry } = require('rxjs');
//...中略
this.myInterval$ = timer(1, 5000).pipe(
switchMap(_ => http.get('https://hoge.com/api')),
retry()
);
shareで全てのオブザーバーへブロードキャストする
const { timer, switchMap, retry, share } = require('rxjs');
//...中略
this.myInterval$ = timer(1, 5000).pipe(
switchMap(_ => http.get('https://hoge.com/api')),
retry(),
share()
);
定期実行を止める
unsubscribe()
unsubscribe()
unsubscribe()
ngOnDestroy
const { timer, switchMap, retry, share, Subject } = require('rxjs');
//...中略
private stopPolling = new Subject();
ngOnDestroy() {
this.stopPolling.next(null);
}
const { timer, switchMap, retry, share, Subject, takeUntil } = require('rxjs');
//...中略
private stopPolling = new Subject();
this.myInterval$ = timer(1, 5000).pipe(
switchMap(_ => http.get('https://hoge.com/api')),
retry(),
share(),
takeUntil(this.stopPolling)
);
import { Injectable, OnDestroy } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {
Observable, timer, Subject,
switchMap, share, retry, takeUntil
} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class HogeService implements OnDestroy {
private myInterval$: Observable<any>;
private stopNotifier = new Subject();
constructor(private http: HttpClient) {
this.myInterval$ = timer(1, 5000).pipe(
switchMap(_ => http.get<any>('https://hoge.com/api')),
retry(),
share(),
takeUntil(this.stopNotifier)
);
}
hogeInfo(): Observable<any> {
return this.myInterval$;
}
ngOnDestroy() {
this.stopNotifier.next(null);
}
}
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー