JavaScriptが約束を守る


非同期プログラミング
JavaScriptでは、非同期コードを作成する方法が異なります.最も重要なものは次のとおりです.
  • コールバック
  • を約束します
  • async/wait it
  • RXJSオブザーバーブル
  • コールバック
    これは非同期プログラミングへの昔ながらの古典的アプローチです.非同期タスクを実行する別の関数への引数として関数を提供します.非同期タスクが完了すると、実行中の関数はコールバック関数を呼び出します.
    このアプローチの主な欠点は、コールバック関数内のコールバック関数内でコールバック関数を定義する必要があります.
    function greeting(name) {
      console.log(`Hello ${name}!`);
    }
    
    function introduction(firstName, lastName, callback) {
      const fullName = `${firstName} ${lastName}`;
    
      callback(fullName);
    }
    
    introduction('Nouman','shah', greeting); 
    //"Hello Nouman shah!"
    
    約束する
    ES 6(2015)では、コールバックで可能であるより読みやすい非同期コードを可能にするという約束が導入されました.
    コールバックと約束の主な違いは、コールバックを使用すると、非同期タスクが完了したときに実行する機能を伝えることです.ただし、実行時には、実行されている関数は、特別なオブジェクトをあなたに返します(約束).
    3つの州があります.

  • 未定:これは約束の最初の状態です
    オペレーションは、
  • から始まります

  • これは、指定された操作が

  • 拒否された.エラー値は通常スローされる
  • function getUsers(onSuccess) {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          // Handle resolve and reject in the asynchronous API
          if (onSuccess) {
            resolve([
              {id: 1, name: 'Jerry'},
              {id: 2, name: 'Elaine'},
              {id: 3, name: 'George'},
            ])
          } else {
             reject('Failed to fetch data!')
          }
        }, 1000)
      })
    }
    
    // Run the getUsers function with the false flag to trigger an error
    getUsers(false)
      .then((response) => {
        console.log(response)
      })
      .catch((error) => {
        console.log(error)
      })
    
    非同期/待機
    「async/wait」というより快適なやり方で約束をする特別な構文があります.それは驚くほど簡単に理解し、使用しています.
    基本的には、asyncとして機能を宣言することができます.この関数は、この関数の本体でwaitキーワードを使用することができます.約束に評価する式の前にWAITキーワードを入れることができます.AWAITキーワードは、約束が解決されるまで、async関数の実行を一時停止します.これが起こるとき、待ち時間の全体の式は約束の結果値に評価します、そして、次に、async関数の実行は再開します.
    さらに、async関数自体は、関数本体の実行が完了したときに解決されるだけでなく、約束を返します.
    function asyncTask(i) {
        return new Promise(resolve => resolve(i + 1));
    }
    async function runAsyncTasks() {
        const res1 = await asyncTask(0);
        const res2 = await asyncTask(res1);
        const res3 = await asyncTask(res2);
        return "Everything done"
    }
    runAsyncTasks().then(result => console.log(result));
    
    Rxjsオブザーバブル
    オブザーバブルは、asyncリクエストを処理する責任があるコールバックと約束のようです.オブザーバブルは、Observablesを利用するRXJSライブラリの一部であり、非同期コードを書くのは本当に簡単です.
    オブザーバブルが通る4つのステージがあります.以下のようになります:
  • 創造
  • の購読
  • 実行
  • の破壊
  • オブザーバブルの作成はCREATE関数を使用します.
    var observable = Rx.Observable.create((observer: any) =>{
    })
    
    観察できる仕事をするために、我々はそれを購読しなければなりません.これは購読メソッドを使用して行うことができます.
    observable.subscribe((data)=>{
       console.log(data);    
    })
    
    オブザーバブルの実行は、作成ブロックの内部にあるものです.
    エラーまたは完全な通知の後、破壊は、自動的に取り消されます.しかし、手動で購読しなければならない場合があります.このタスクを手動で行うには、次のようにします.
    var subscription = observable.subscribe(x => console.log(x)); // Later: subscription.unsubscribe();
    

    見込み対観測量
    オブザーバブルは怠惰だが約束はない
    約束が作成されるとすぐに、執行者機能はすぐに呼ばれます.
  • オブザーバブルは怠惰です:クライアントが観測可能に購読するとき、加入者関数は呼ばれます.
  • オブザーバブルは約束と違って複数の値を扱う
    オブザーバブルが複数の値を与えることができる間、約束はただ一つの価値を提供することができます.
    オブザーバブルはキャンセル可能である
    あなたはunsubscribeメソッドを使用してそれを追放することによってオブザーバブルを取り消すことができます、しかし、約束にはそのような特徴がありません.