javascript promise


承諾(=承諾、可能性)


A Promise is an object representing the eventual completion or failure of an asynchronous operation.
promiseは、非同期操作が最終的に成功または失敗したことを示すオブジェクトです.
cf>非同期操作
コードがA->B->C順に書き込まれると、JavaScriptはA->B->C順に実行されます.
BはAが終わるまで運転しません.
つまり,タスクがまだ終了していなくてもJavaScriptは待機せず,次のタスクを実行する.
しかしこれでは,Aで演算した結果,Bで用いられる論理である場合に大きな問題となる.

使用理由

  • callback-hell非同期論理を同期論理として扱うのを避けるため
  • callback関数ではコールポイントを指定できませんが、promiseではthenでコールポイントを指定できます
  • 使用方法

    function getData() {
      return new Promise(function(resolve, reject) {
        const data = 100;
        resolve(data);
      });
    }
    
    // resolve()의 결과 값 data를 resolvedData로 받음
    getData().then(function(resolvedData) {
      console.log(resolvedData); // 100
    });
    
    function getData() {
      return new Promise(function(resolve, reject) {
        reject(new Error("Request is failed"));
      });
    }
    
    // reject()의 결과 값 Error를 err에 받음
    getData().then().catch(function(err) {
      console.log(err); // Error: Request is failed
    });
    

    async await


    functionの前にasyncを付けると、この関数は常にpromiseを返します.
    承諾の値ではなく、解決された承諾を返します.
    waitキーワードを使用するターゲットがpromiseでない場合は、自動的にPromiseが行われます.resolve()の値を返します
    =>承諾でなくてもawaitを使用して同期作業を行うことができます.
    async function foo() {
      return "foo"
    }
    foo().then((value)=>alert(value)); // foo