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タグの使用に注意してください

推薦する

テーブルリストを破棄するには、標準のdl、dt、ddタグを使用します。

現在、ますます多くのフロントエンド開発者が、元のテーブル レイアウトを xHTML + CSS に置...

良いデザインについて

<br />「良いデザインとは何か」と答える 1 万人に対して、少なくとも 1 万 1 ...

Windows および Linux で tomcat9 を介して war パッケージを手動で展開する方法

Windows 環境と Linux 環境では結果が異なります。ウィンドウズステップ 1: Maven...

Windows での MySQL 5.7.18 インストール チュートリアル

この記事では、圧縮パッケージから MySQL をインストールする方法について説明します。 1. My...

Vue の 2 択タブバー切り替えの新しいアプローチ

問題の説明プロジェクトに取り組んでいるときに、タブ バーの切り替え効果を作成する必要がある場合があり...

ブラウザタブの左端に表示されるウェブサイトのアイコンを設定します

この文の目的は何ですか?コードをコピーコードは次のとおりです。 <link rel="...

Vueのdiffアルゴリズムについての簡単な説明

目次概要バーチャルドム原理実装プロセスパッチ方式sameVnode関数patchVnode関数upd...

Linux ファイルとユーザー管理の実践

1. /etc ディレクトリ内の、文字以外の文字で始まり、その後に文字と任意の長さのその他の文字が続...

Vue3のdefineComponentの役割についての簡単な説明

目次defineComponent オーバーロード関数開発実務defineComponent 関数は...

vue-routeルーティング管理のインストールと設定方法

導入Vue Router 、 Vue.jsの公式ルーティング マネージャーです。 Vue.jsのコア...

よく使われるnginxの書き換えルールの詳細な説明

この記事では、Web ページのリンクを美しくするためによく使用される書き換えルールをいくつか紹介しま...

HTML シンボルからエンティティへのアルゴリズムのチャレンジ

チャレンジ:文字列内の文字 &、<、>、" (二重引用符)、および &...

Dockerを使用してNextCloudネットワークディスクを展開する方法

NextCloud コンピュータ上の任意のファイルやフォルダを共有し、NextCloud サーバーと...

JavaScript コードベースをよりクリーンにする 5 つの方法

目次1. 短絡や条件文の代わりにデフォルトのパラメータを使用する2. 複数の条件の処理3. スイッチ...

Centos7 で keepalived ログを別のパスに設定する方法の詳細な説明

Keepalived のインストール: cd <keepalived_sourcecode_p...