[キャンプを誘導する挑戦]Day 12-Publisher-SubscriberモードとJSの非同期


この文章はBoost Campの挑戦中に学んだことをまとめた.
リファレンス , リファレンス

Pub-Sub


説明する前にPub-Subモードはobserverモードと多くの類似点があった.
情報を伝え合うことが似ています.

傍観者モードとは、ウィキペディアを観察する際に、対象の状態の変化を観察する観察者が対象に登録し、状態が変化するたびに方法で通知するモードである.
簡単に言えば,オブジェクトが変化するたびに,傍観者にオブジェクトの情報を伝えると考えられる.
これとは異なり、Pub-Subモードは非同期メッセージパターンである.
pubのメッセージはobserverとは異なり、特定の受信者ではなく、メッセージを受信する必要があるsubに渡される.
すなわち,pubは互いに知らなくてもchannelにメッセージを送信することができ,subはchannelからメッセージを受信するだけでよい.

違いをよく知る


pub−subモードは、メッセージ送信者および受信者と直接通信するのではなく、両者の間のイベントバスを介して伝達される.
イベントバスは、すべての受信メッセージをフィルタし、subに再配布します.
そのため、お互いを知らなくても、コミュニケーションの環境を作ることができます.
さらに,傍観者モードはイベントを直接送信・受信するため同期方式を用い,pub−subは用いないため非同期方式を用いる.

JSで非同期


Promise


要するに、コンテンツは結果を返さずに実行されるオブジェクトです.
ステータス:
  • 保留(代替):非同期処理が完了していない
  • Fulfilled(履行済み):
  • 処理完了
  • Rejected(失敗):エラー
  • 3種類あります.
    ex)
    const condition = true;
    const promise = new Promise((resolve, reject) => {
      if (condition) {
        resolve('resolved');
      } else {
        reject('rejected');
      }
    });
    
    promise
      .then((res) => {
        console.log(res);
      })
      .catch((error) => {
        console.error(error);
      });
    条件は承諾の価値を決定する.
    本当の場合はresolveを呼び出しthenで結果値を返します.
    偽物の場合は拒否を呼び出し、catchで結果値を返します.
    欠点はコードが長くなる可能性があることです->そうなると多くのコールバックがあります.

    async/await


    Promiseの欠点を解消するために作られたもので、待つことでpromise値が得られます
    ただし、awaitを使用するにはasyncと宣言する必要があります.
    ex)
    (async () => {
      const condition = true;
      const promise = new Promise((resolve, reject) => {
        if (condition) {
          resolve('resolved');
        } else {
          reject('rejected');
        }
      });
    
      try {
        const result = await promise;
        console.log(result);
      } catch (err) {
        console.error(err);
      }
    })();
    承諾とは異なり,エラーを制御する機能はなく,単独でエラー処理を行う必要がある.