JavaScript Promise の徹底解説

JavaScript Promise の徹底解説

1. Promise とは何ですか?

Promise オブジェクトはコンテナのようなものです。特定の操作を実行するコードが含まれています。コードが実行されると、2 つのコールバック関数が実行されます。1 つは成功した操作 (解決) のコールバック関数で、もう 1 つは失敗した操作 (拒否) のコールバック関数です。

2. なぜ Promise が存在するのでしょうか?

Promise は、非同期プログラミングで使用されるコールバック メカニズムのいくつかの問題を解決するために作成されました。

  • コールバック地獄

コールバック地獄: Promise はネストされたコールバックを .then().then()… に変換できるため、コードの記述と読み取りがより直感的になります。

  • 難しいエラー処理: エラー処理ではコールバックよりも Promise の方が明確で直感的です
  • 複数の非同期操作を同時に実行するコードを書くのは難しいですが、Promiseを使えば簡単にこの状況に対処できます。

3つのPromise共通API

  • promise の .then() メソッドが実行された後、これを実行できます。これには、成功時のコールバック関数と失敗時のコールバック関数の 2 つのパラメーターがあります。
  • 解決promise.resolveメソッドを使用して、promiseオブジェクトを素早く返します。
  • 拒否するpromise.rejectメソッドを使用して、promiseオブジェクトを素早く返します。
  • all 複数の並列非同期操作を同時に実行します。

4つのPromiseの一般的な使用法

1 コールバック地獄を解決するには?

.then() は値を返さない関数なので、Promise チェーンは継続されなくなります。この時点では、後で .then() を呼び出しても効果はありません。

Promise.resolve('foo').then(関数{
  console.log(s);
}).then(関数{
  // 実行されない
  console.log(s);
});

.then()には戻り値関数があり、Promiseチェーンを継続することができます。

Promise.resolve('foo').then(関数{
  console.log(s);
  s + 'bar' を返します。
}).then(関数{
  console.log(s);
});

// フー
// フーバー

.then() には値を返す関数があり、戻り値は別の Promise オブジェクトであり、これによっても Promise が続行されます。前者との違いは、.then() を再度呼び出すと非同期操作がトリガーされる可能性があるため、次のラウンドの resolve() がすぐにはトリガーされないことです。

Promise.resolve('foo').then(関数{
  新しい Promise を返します ((resolve, reject) => {
      console.log(s);
      タイムアウトを設定する(() => {
          解決(s + 'bar')
        }, 1000);
    });
}).then(関数{
  console.log(s);
});


// フー
// foobar ("foo" が表示されてから 1 秒後に表示されます)

2 Promise.all() は戻り値の同時同期受信を実装します アプリケーションシナリオの説明 (複数のインターフェースから同時にデータを呼び出し、フロントエンドでデータを処理する必要があるため、すべてのインターフェースがデータを返すのを待ってから操作する必要があります。)

//デモ
promise1 を const として返す。
定数promise2 = 42;
const promise3 = 新しい Promise((resolve, 拒否) => {
  setTimeout(解決、100、'foo');
});
 
Promise.all([promise1, promise2, promise3]).then((値) => {
  console.log(値);
});
// 期待される出力: 配列 [3, 42, "foo"]

Promise.all() と sync await の違い

//sync 操作時間を2秒待機する async function Index2() {
      コンソール.time()
      const p1 = 新しい Promise((resolve, reject) => {を待つ
        console.log('ここがp1です')
        タイムアウトを設定する(() => {
          解決('p1の戻り値です')
        }, 1000)
      })
      const p2 = 新しい Promise((resolve, reject) => {を待つ
        console.log('ここがp2です')
        タイムアウトを設定する(() => {
          解決('p2の戻り値です')
        }, 1000)
      })
      コンソールログ(p1)
      コンソール.log(p2) 
      コンソール.timeEnd()
   }
    インデックス2();

ここに画像の説明を挿入

// 呼び出しを実装するには Promise.all() を使用します。操作時間1秒関数Index() {
      コンソール.time()
      const p1 = new Promise((resolve, deny) => {
        console.log('ここがp1です')
        タイムアウトを設定する(() => {
          解決('p1の戻り値です')
        }, 1000)
      })
      const p2 = new Promise((resolve, deny) => {
        console.log('ここがp2です')
        タイムアウトを設定する(() => {
          解決('p2の戻り値です')
        }, 1000)
      })
      Promise.all([p1, p2]).then((val) => {
        コンソール.log(値)
        コンソール.timeEnd()
      })
}

ここに画像の説明を挿入

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript における Promise の詳細な説明
  • フロントエンドJavaScriptの約束
  • JS 9 Promise 面接の質問
  • JS の Promise に中止関数を追加する方法
  • JavaScriptのPromiseを徹底的に理解する

<<:  デザイナーが再びハマーの公式サイトに不満を述べる

>>:  MySQLデータベースの基礎知識

推薦する

Win7 システムでの MySQL 5.7.11 の詳細なインストール チュートリアル

オペレーティング システム: Win7 64 ビット Ultimate Edition MySQL ...

MySQLクエリが遅い理由

目次1. 遅いところはどこですか? 2. 不要なデータをクエリしましたか? 1. 不要なレコードをク...

Vue の動的コンポーネントと非同期コンポーネントの詳細な理解

1. 動的コンポーネント <!DOCTYPE html> <html> &l...

リンクをクリックしたときにファイルのダウンロードダイアログボックスをポップアップ表示するには、HTML で href を使用します。

今日、新しい技を学びました。あまりやったことがなかったので、今まで知りませんでした...目的: リン...

SQL重複排除方法の概要

SQL を使用してデータを抽出する場合、テーブル内で重複した値に遭遇することがよくあります。たとえ...

3つの簡単な例を使ってハイパーリンクの下線を削除する方法

ハイパーリンクの下線を削除するには、スタイルシート CSS を使用する必要があります。当面は CSS...

Ubuntu 18.04 が VMware 仮想マシンでネットワークに接続できない問題の解決策

仮想マシン内のUbuntu 18.04がネットワークに接続できない問題の解決策は次のとおりですVMw...

iframe を介してフレームセットを本体に配置する

フレームセットと本文は同じレベルにあるため、本文にフレームセットを配置することはできません。まずペー...

HTMLフォーム送信方法のケーススタディ

フォームの送信方法をまとめると次のようになります。 1. 送信ボタンを使用して送信します。送信ボタン...

CentOS 6.5 の設定 ssh キーフリーログインで pssh コマンドを実行する方法の説明

1. psshを確認してインストールします。yum list pssh 2. キーレスログインが設定...

Windows が MySQL サービスを開始できず、エラー 1067 を報告する場合の解決策

突然、MySQLにログインすると、アクセスが拒否されたか、データベースに接続できないと表示されました...

仮想マシンのLinux初心者がIPを設定し、ネットワークを再起動する

仮想マシンを初めて使用する方や、仮想マシンに Linux をインストールしたばかりの方は、システムが...

Linux での nginx のインストール、展開、使用方法の詳細な説明

目次1. ダウンロード2. 展開3. Nginxログ関連の設定4. ファイルダウンローダーとして n...

デザインにおいて無視できないインタラクティブデザインにおける製品状態の分析

製品デザインのプロセスにおいて、デザイナーは常に写真を非常に美しくすることを好みます。仮想ページのコ...

SQLのさまざまな結合サマリーの詳細な説明

SQL 左結合、右結合、内部結合、自然結合 さまざまな結合の概要SQL には、左結合、右結合、内部結...