保証する

3151 ワード

✔非同期処理方法

  • callback function
    可読性が悪く,エラー処理が困難であり,一度に複数の非同期処理を処理することも限られている.

  • Promise
    これはES 6が非同期処理のために導入した新しいモードである.プロセスはコールバックモードの欠点を補い,非同期処理時点を明確に示すことができる.
  • 📚 Callback Function


    コールバックモードの欠点を理解します.

    💡 地獄


    非同期処理モードは、他のタスクをブロックすることなくタスクを並列に処理する利点がある.
    欠点は、処理順序を保証するために、複数のコールバック関数がネストされると、より複雑なcallback hellが発生することである.
    📌 ひどうきプロセッシングモデル
    = Asynchronous processing model
    = Non-Blocking processing model

    💡 エラー処理の制限

    try {
      setTimeout(() => { throw new Error('Error!'); }, 1000);
    } catch (e) {
      console.log('에러를 캐치하지 못한다..');
      console.log(e);
    }
    tryブロックでsettimeout関数を実行すると、1秒後にコールバック関数が実行され、このコールバック関数に異常が発生します.ただし、この例外はcatchブロックでは捉えられません.理由は以下の通り.

  • settimeout(=非同期)関数は、コールバック関数が実行される前にすぐに終了し、コールバックスタックから削除されます.

  • その後tickイベントが発生すると、コールバック関数はタスクキューに移動し、呼び出しスタックが空の場合に呼び出しスタックに移動して実行されます.

  • settimeout関数が呼び出しスタックから削除されます.
    =コールバック関数を呼び出すのはsettimeout関数ではありません.呼び出し元の場合は、コールスタックに存在する必要があります.

  • 例外は呼び出し者方向に伝播します.
    コールバック関数の呼び出し元はsettimeout関数ではありません.

  • コールバック関数で発生したエラーはcatchブロックで取得されないため、プロセスは終了します.
  • 📚 Promise


    ダイヤルバックモードの様々な問題を克服するために提案された計画を理解する.

    💡 プロセスの作成


    const promise = new Promise((resolve, reject) => {});
    ✔ new Promise
    コンストラクション関数によってインスタンス化されます.
    ✔ executor
    newPromiseに渡される関数は、newPromiseの作成時に自動的に実行されます.
    ✔ resolve/reject
    executorパラメータとして渡されるコールバックは、JavaScriptエンジンが事前に定義した関数です.したがって、executorにコードを記述するだけでよいが、executorは処理が成功したかどうかに応じてコールバックを呼び出す必要がある.
    resolve(value):正常にvalue(結果)とともに呼び出されます.
    拒否(error):エラーが発生したときにエラー(errorオブジェクト)を呼び出す

    ➖PromisオブジェクトのProperty



    新Promise作成者が返すPromisオブジェクトには、次の内部Propertyがあります.
  • state
  • result
  • state、result propertyは内部propertyであり、開発者は直接アクセスできません.then, .catch, .finallyメソッドを使用してアクセスできます.

    💡 プロミスの国


    プロセスには、非同期処理が成功(完了)したか失敗(拒否)したかなどのステータス情報があります.


  • fulfilled
    非同期処理が実行されました(成功)
    解析関数が呼び出されました

  • rejected
    非同期処理の実行(失敗)
    拒否関数を呼び出すステータス

  • settled
    非同期処理が実行されました(成功または失敗)
    resolveまたは拒否関数が呼び出されました

  • pending
    非同期処理はまだ実行されていません
    resolveまたは拒否関数が呼び出されていません
  • 💡 プロセスの後続処理方法


    promiseオブジェクトは、実行者と処理結果を受信する処理方法を接続します.処理結果はpromiseオブジェクトの後続の処理方法(.then,.catch,.finally)に渡されます.

    ➖ then

    promise.then(
      function(result) {}
      function(error) {}
    )
    次に、メソッドは2つのコールバック関数をパラメータとして渡します.
  • が成功したときにコールを受信し、結果を実行します.
  • 失敗時にコールし、エラーを受信します.
  • 成功係数を1つだけ渡す
    転送のみに失敗しました.then(null, errorHandlingFunction)

    ➖ catch


    .catch(errorHandlingFunction)は.次にnullを渡すのと同じ動作をします.
  • 非同期処理中のエラー
  • その後、方法で発生するエラー
  • ➖ finally


    📚 エラー処理