Angular_非同期処理を実現するObserverとSubscriber #265日目
Angularではイベント駆動型の非同期処理を実現することが可能です。
rxjsライブラリのObservableを使用します。これはsubjectと呼ばれるオブジェクトがobserversと呼ばれるその依存オブジェクトのリストを維持し、状態の変化を自動的に通知する「オブザーバーパターン」というソフトウェア設計パターンになっています。
ブログに分かりやすいイメージ図が貼ってありました。
データを発信する側がObserver、データを受信する側がSubscriberと呼ばれ、それぞれ異なるコンポーネントに存在するケースが多いです。
SubscribeされたObservebleは、値に変更がある度に送信され、オペレーターにより処理されたあとにSubscriberに届けられます。
データを発信する側 Observer
実装例を紹介します。Angularの公式チュートリアルからの抜粋で、該当箇所のみ表示しています。getHeroes()関数をObservableで定義しています。
import { Hero } from './hero';
import { Observable, of } from 'rxjs';
import { HttpClient, HttpHeaders } from '@angular/common/http';
export class HeroService {
private heroesUrl = 'api/heroes';
constructor(private http: HttpClient) { }
getHeroes(): Observable<Hero[]> {
return this.http.get<Hero[]>(this.heroesUrl)
.pipe(
tap(heroes => this.log('fetched heroes')), []))
);
}
データを受信する側 Subscriber
Observableオブジェクトの次にsubscribeメソッドを使用してデータをsubscribeします。上述のHeroServiceクラスをインポートして活用します。
import { HeroService } from '../hero.service';
getHeroes(): void {
this.heroService.getHeroes().subscribe(heroes => this.heroes = heroes);
}
一先ずデータを発信する側がObserver、データを受信する側がSubscriber、という点はしっかり覚えておきたいですね。
ここまでお読みいただきありがとうございました!