Angular、Promise、RxJSにおける「What is the difference between Promises and Observables?」

2024-04-02

Angular、Promise、RxJSにおける「What is the difference between Promises and Observables?」

Promise

Promiseは、非同期処理の完了を待つための仕組みです。処理が完了したら、成功または失敗の結果を返します。

特徴:

  • 単一の値またはエラーを返す
  • 状態は「完了」または「失敗」の2つのみ
  • 処理のキャンセルはできない
  • ネストが複雑になりやすい

例:

const promise = fetch('https://api.example.com/data');

promise.then(response => {
  // 成功時の処理
}).catch(error => {
  // 失敗時の処理
});

Observable

Observableは、非同期処理のデータストリームを表す仕組みです。時間経過とともに複数の値を発行し、購読者はその値を受け取ることができます。

  • 複数の値を発行できる
  • 状態は「完了」、「失敗」、「継続」の3つ
const observable = RxJS.interval(1000);

observable.subscribe(value => {
  // 1秒ごとに値を受け取る
});

AngularにおけるPromiseとObservable

Angularは、PromiseObservableの両方をサポートしています。

  • Promise: コンポーネントの初期化など、単一の値を取得する必要がある場合に使用
  • Observable: データのストリーミングなど、複数の値を取得する必要がある場合に使用
  • コンポーネントの初期化時にAPIからデータを取得する: Promise
  • リアルタイムで更新されるデータを表示する: Observable

まとめ

PromiseObservableは、それぞれ異なる強みを持つ非同期処理のための仕組みです。

  • Promise: 単一の値を取得する場合に適している



Promise

// コンポーネントの初期化時にAPIからデータを取得する

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {

  data: any;

  constructor(private http: HttpClient) {}

  ngOnInit() {
    this.http.get('https://api.example.com/data').subscribe(data => {
      this.data = data;
    });
  }
}

Observable

// リアルタイムで更新されるデータを表示する

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { interval } from 'rxjs/observable/interval';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {

  count: number = 0;

  constructor() {}

  ngOnInit() {
    const observable = interval(1000);

    observable.subscribe(value => {
      this.count = value;
    });
  }
}
  • 上記のサンプルコードは、あくまで基本的な使い方を示したものです。
  • より複雑な処理を行う場合は、PromiseObservableのより高度な機能を利用する必要があります。
  • 詳細については、AngularRxJSの公式ドキュメントを参照してください。



Angular、Promise、RxJSにおける「What is the difference between Promises and Observables?」の他の解説方法

アニメーション

  • Promise: アニメーションの完了を待つ
  • Observable: アニメーションの状態変化を監視

イベント処理

  • Promise: イベントの発生を待つ
  • Observable: イベントストリームを購読

データのストリーミング

  • Promise: データのチャンクを取得
  • Observable: データストリームをリアルタイムで受信

メタファー

  • Promise: 手紙の配達
  • Observable: テレビ番組の視聴

図表

  • Observable: データの流れ図

対話型デモ

  • Promise: ボタンをクリックして結果を表示
  • Observable: スライダーを動かして値の変化を確認

チュートリアル

  • Promise: Promiseの基本的な使い方を学ぶ
  • Observable: Observablesの基本的な使い方を学ぶ

ユースケース

  • Promise: ユーザー認証

アンケート

  • Promise: どちらの方が使いやすいか
  • Observable: どちらの方が汎用性が高い

angular promise rxjs


テンプレート駆動フォーム vs Reactive Forms: それぞれのユースケース

一方、Reactive Formsは、より複雑なフォームロジックを構築するのに適しており、コンポーネントのTypeScriptコードでフォームコントロールを定義します。このチュートリアルでは、テンプレート駆動フォームにおいて、コンポーネントから ngForm インスタンスにアクセスする方法について解説します。...


AngularでngForリピートを特定の数のアイテムに制限する方法

方法sliceパイプを使用するsliceパイプを使用して、配列の最初のn個のアイテムのみを表示できます。上記の例では、items配列の最初のn個のアイテムのみがループ処理されます。ngIfを使用するngIfを使用して、特定の条件を満たすアイテムのみを表示できます。...


Angular 2 で発生する「Unable to inject ActivatedRouteSnapshot」エラーを解決するための 5 つのヒント

Angular 2 で "Unable to inject ActivatedRouteSnapshot" エラーが発生すると、ルーティング情報にアクセスできなくなり、アプリケーションが正常に動作しなくなります。このエラーは、主に以下の2つの原因で発生します。...


【保存版】AngularでJSONデータを扱う全テクニック:res.json()問題から高度な処理まで

原因:解決策:Angular 6 以前のバージョンの場合:rxjs パッケージの map() オペレーターと json() パイプを使用して JSON データをパースする必要があります。this. http. get('https://api...


【初心者向け】Angular 6 で複数 ng-content を使ってコンポーネントをレベルアップ!

概要<ng-content> 要素は、コンポーネントテンプレート内でコンテンツを投影するためのプレースホルダーとして機能します。複数の <ng-content> 要素を使用すると、コンポーネントテンプレート内に複数のコンテンツ領域を作成できます。...


SQL SQL SQL SQL Amazon で見る



jQuery DeferredsとPromisesを使いこなす: .then() vs .done() の違い

オブジェクトの生成Deferred: jQuery. Deferred()を使って生成Promise: new Promise()を使って生成状態遷移Deferred: 3つの状態を持つ (pending, resolved, rejected)


Angular開発で迷ったらコレ!@Directiveと@Componentを使い分けるポイント

@Directive:HTML要素に新しい機能やスタイルを追加するために使用されます。テンプレートには直接使用できません。属性ディレクティブと構造ディレクティブの2種類があります。例:ngClass、ngIf@Component:テンプレートと論理を組み合わせた独立したUIコンポーネントを作成するために使用されます。


Angular コンポーネントの初期化:Constructor と ngOnInit の違い

コンストラクタコンポーネントが生成されるときに最初に呼び出されるメソッドです。以下の用途に使用されます。コンポーネントの初期化依存関係の注入プロパティの初期設定ngOnInitデータの取得その他の初期化処理主な違い使い分けの例コンポーネントの初期設定には constructor を使用します。


Angular2 テンプレート構文: 括弧、角括弧、アスタリスクの違い

括弧は、主にプロパティバインディングに使用されます。式や変数を評価し、その結果を要素の属性にバインドします。例:上記のコードでは、titleプロパティの値がdiv要素のinnerHTML属性にバインドされます。角括弧は、主に配列やオブジェクトのプロパティへのアクセスに使用されます。インデックスやプロパティ名を使用して、特定の要素を取得できます。


AngularでRxJsを使ってHttp通信の結果を共有する方法

この解説を理解するには、以下の知識が必要です。AngularRxJsTypeScriptAngularでHttp通信を行い、その結果を複数のコンポーネントで共有したい場合があります。しかし、デフォルトではHttp通信の結果はコンポーネント内でしか利用できません。


その他の解除方法: take(), takeUntil(), finalize(), refCount()

Subscription は、Observable からデータを受け取るためのオブジェクトです。subscribe() メソッドによって作成され、以下の処理を行います。Observable からデータを受け取り、next() メソッドで処理します。


RxJS公式ドキュメントにも書いていない!BehaviorSubjectとObservableの秘密

データ配信Observable: 購読者が登録した時点からデータ配信を開始します。過去に発行されたデータは受け取れません。BehaviorSubject: 購読者が登録した時点だけでなく、直前の最新値も配信します。例:対してBehaviorSubject:


Angular テンプレートでワンランク上の表現! *ngIf else とその他の方法を比較

上記のように、*ngIf ディレクティブに条件式を記述し、else 構文でテンプレートを指定します。条件式には、変数や演算子を使用することができます。複数の条件を組み合わせるために、ネストされた *ngIf を使用することができます。*ngIf と ngSwitch を組み合わせて、より複雑な条件分岐を実現することができます。


AngularでBootstrapを使う:ng-bootstrapとngx-bootstrap徹底比較

ng-bootstrap特徴 軽量でシンプルなライブラリ Bootstrap 4のみをサポート 公式ドキュメントが充実 アクティブな開発コミュニティ軽量でシンプルなライブラリBootstrap 4のみをサポート公式ドキュメントが充実アクティブな開発コミュニティ