blog

約束

関数の実行中のPromiseは同期ですが、call resolveメソッドの最後の非同期操作や、エラーcall rejectメソッドの途中で遭遇する非同期操作があり、いずれもEventLoopにマイク...

Aug 15, 2020 · 2 min. read

プロミスがマイクロタスクを導入する理由

Promiseの実行関数は同期ですが、その中に非同期処理があり、非同期処理の最後にresolveメソッドを呼び出したり、途中でエラーが発生したときにrejectメソッドを呼び出したりしますが、いずれもEventLoopにマイクロタスクとして追加されます。そして、なぜマイクロタスクがあるのでしょうか?

コールバックの問題を処理する終了方法

  • すべての非同期タスクが実行されるまで同期コールバックを使用してから、後のタスクに進みます。
  • 非同期コールバックを使用して、コールバック関数を現在のすべてのマクロタスクのキューの最後に配置します。
  • 非同期コールバックを使用して、コールバック関数を現在のマクロタスクの最後に配置します。

比較的

なぜなら、同期的な方法はプログラム全体の実行効果に影響を与え、あるタスクの実行時間が非常に長い場合、次のタスクに影響を与え、この待ち時間の一部が他のことに使われる可能性があり、結果としてCPUの利用率が低くなるからです。これに加えて、遅延バインディングの効果を達成することはできません コールバック関数を実行する2番目の方法のタイミングは、現在のマクロタスクがすべて実行された後、今実行される多くのマクロタスクがある場合、それはまた、ブロッキングになり、このコールバック関数は、遅延され、ページラグが発生します 以上の理由から、プロミスは、マイクロタスクの導入である3番目の方法を採用し、現在のマクロタスクの最後に配置され、コールバック関数は現在のマクロタスクの最後に配置されます。

ペインポイントを解決

  • 同期コールバックの代わりに非同期コールバックを使うことで、無駄なCPUパフォーマンスの問題を解決
  • リアルタイム・コールバック実行の問題を解決するために、現在のマクロ・タスクの最後に置きます。

結集地獄

  • 重層ネスティング
  • 成功と失敗の2つの可能性は、実行後に各タスクで別々に処理されます。

治療

  • コールバック関数の遅延バインディング: コールバック関数は直接宣言されません。
  • 戻り値のパススルー: 連鎖呼び出しが容易になります
  • エラー・バブリング: 最後のキャッチで受信。
Read next

JavaScript入門

1.機能優先の軽量なインタープリタ型またはジャストインタイム・コンパイル型の高水準プログラミング言語です。ウェブページを開発するためのスクリプト言語として知られていますが、ブラウザ以外の多くの環境、プロトタイプベースのプログラミング、マルチパラダイム動的スクリプト言語、...

Aug 14, 2020 · 1 min read