JavaScript における Promise の詳細な説明

JavaScript における Promise の詳細な説明

Promise は非同期プログラミングのソリューションです。非同期操作のメッセージを取得できるオブジェクトです。非同期プログラミングの難しさを大幅に改善し、コールバック地獄を回避します。コールバック関数やイベントなどの従来のソリューションよりも合理的で強力です。

構文的には、Promise は非同期操作からメッセージを受信できるオブジェクトです。さまざまな非同期操作を同じ方法で処理できるように、統一されたAPIを提供します。

1. Promise インスタンスには 3 つの状態があります。

(1)保留中

(2)解決

(3)拒否

2. Promiseインスタンスには2つのプロセスがある

(1)保留中>完了:解決済み

(2)保留中>拒否:拒否

注意: ステータスが「購入と販売」から「その他のステータス」に変更されると、ステータスを変更することはできません。

Promise の基本的な使用法:

1. Promiseオブジェクトを作成する

Promise オブジェクトは非同期操作を表し、保留中 (進行中)、実行済み (成功)、拒否済み (失敗) の 3 つの状態があります。

Promise コンストラクターは、関数をパラメーターとして受け入れます。その 2 つのパラメーターは、resolve と reject です。

2. プロミス方式

Promise には 5 つの一般的なメソッドがあります。

(1)それから()

then メソッドは、2 つのコールバック関数をパラメータとして受け取ることができます。最初のコールバック関数は、Promise オブジェクトの状態が resolved に変わったときに呼び出され、2 番目のコールバック関数は、Promise オブジェクトの状態が declined に変わったときに呼び出されます。 2 番目のパラメータは省略できます。

promise = new Promise((resolve,reject)=>{ とする
    ajax('first').success(function(res){
        解決する(res);
    })
})
promise.then(res=>{
    新しい Promise を返します ((resovle,reject)=>{
        ajax('second').success(function(res){
            解決する
        })
    })
}).then(res=>{
    新しい Promise を返します ((resovle,reject)=>{
        ajax('second').success(function(res){
            解決する
        })
    })
}).then(res=>{
 })

(2) キャッチ()

このメソッドは then メソッドの 2 番目のパラメータと同等であり、拒否コールバック関数を指します。

もうひとつの機能としては、resolve コールバック関数の実行時にエラーが発生して例外がスローされた場合、実行は停止せず catch メソッドに入ります。

p.then((データ) => {
     console.log('解決されました',データ);
},(エラー) => {
     console.log('拒否されました',err);
     }
); 
p.then((データ) => {
    console.log('解決されました',データ);
}).catch((エラー) => {
    console.log('拒否されました',err);
});

(3) すべて()

all メソッドはタスクを完了して実行できます。このメソッドは配列を受け取り、配列内の各項目は Promise オブジェクトです。配列内のすべての Promise 状態が解決済みに達すると、拒否される状態がある場合、すべてのメソッドの状態が解決済みになります。すると、すべてのメソッドのステータスが拒否されます。

ジャバスクリプト
promise1 = new Promise((resolve,reject)=>{ とする
	タイムアウトを設定します(()=>{
       解決する(1);
	},2000)
});
promise2 = new Promise((resolve,reject)=>{ とする
	タイムアウトを設定します(()=>{
       解決する(2);
	},1000)
});
promise3 = new Promise((resolve,reject)=>{ とする
	タイムアウトを設定します(()=>{
       解決する(3);
	},3000)
});
Promise.all([promise1,promise2,promise3]).then(res=>{
    コンソールログ(res);
    //結果は[1,2,3]です 
})

(4) 受信()

受信メソッドは all と同じで、受信したパラメータは Promise の配列ですが、all とは異なり、最初のイベントが実行されると、promise オブジェクトの値が直接返されます。

rece の実際の機能: 何かをしたいが、長い間諦めてしまったときに、この方法を使って解決することができます。

Promise.race([promise1, timeOutPromise(5000)]).then(res=>{})

(5) 最後に()

finally メソッドは、Promise オブジェクトの最終状態に関係なく実行される操作を指定するために使用されます。 (このメソッドはES2018標準で導入されています)

約束
.then(結果 => {···})
.catch(エラー => {···})
.finally(() => {···});

finally メソッドのコールバック関数はパラメーターを受け入れないため、以前の Promise ステータスが満たされたか拒否されたかを知る方法はありません。

約束
.finally(() => {
  // ステートメント });
// プロミスと同等
。それから(
  結果 => {
    // ステートメントは結果を返します。
  },
  エラー => {
    //ステートメントはエラーをスローします。
  }
);

上記のコードでは、finally メソッドが記述されていない場合は、成功と失敗の両方に対して同じステートメントを 1 回記述する必要があります。 finallyメソッドでは、一度だけ書くだけでよい。

要約する

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

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

<<:  CSS の両端揃えを実現する div+css レイアウトの 4 つの方法の概要

>>:  ウェブページ作成時のHTMLタグの使用に注意してください

推薦する

nginx を最適化する 6 つの方法

1. Nginxの同時実行性を最適化する [root@proxy ~]# ab -n 2000 -c...

ファイル操作のためのLinuxシステムコール

目次1. ファイルを開くパラメータの紹介2. ファイルの読み取り3. ファイルを書き込む4. 閉じる...

初心者がHTMLタグを学ぶ(2)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

Bash の山括弧の深い理解 (初心者向け)

序文Bash には、ls、cd、mv などの重要な組み込みコマンドが多数あるほか、grep、awk、...

Mac OS 10.11 での MySQL 5.7.12 のインストールと設定のチュートリアル

Mac OS 10.11 に MySQL をインストールして設定する方法を、主に写真を使って手順を簡...

JavaScript で H5 ゴールド コイン関数を実装する (サンプル コード)

今日は春節の金貨の赤い封筒のアクティビティを作りました。なかなか良い出来だと思います。皆さんと共有し...

mysql 簡単な操作例を表示

この記事では、例を挙げて mysql show 操作について説明します。ご参考までに、詳細は以下の通...

カルーセルアニメーションを実現するVueコンポーネント

この記事では、カルーセルアニメーションを実現するためのVueコンポーネントの具体的なコードを例として...

Vue3 setup() の高度な使用例の詳細な説明

目次1. オプションAPIと組み合わせAPIの違い2. セットアップを具体的にどのように使用するので...

VueはWebSocketを使用してチャット機能をシミュレートします

この効果は、2つのブラウザが互いにシミュレートしていることを示しています 1. シミュレートされたノ...

HTML でフロートをクリアする 2 つの方法

1. クリアフローティング法1前の親要素の高さを設定します。注: エンタープライズ開発では、可能であ...

Vue Router の 10 の高度なヒントのまとめ

序文Vue Router は、Vue.js の公式ルーティング マネージャーです。 Vue.js の...

IIS7 IIS8 http は自動的に HTTPS にジャンプします (ポート 80 はポート 443 にジャンプします)

IIS7 では、「URL REWRITE2」疑似静的モジュールがインストールされているかどうかを確...

Linux CentOS インストール JDK および Tomcat チュートリアル

まずJDKをダウンロードします。ここではjdk-8u181-linux-x64.tar.gzを使用し...

CSS のサイズ単位についての簡単な説明

ブラウザの互換性はどんどん良くなってきています。モバイル端末は基本的にすべてWebKitベースです。...