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

推薦する

JavaScriptの基礎を学ぶ

目次1. JavaScriptを記述する場所2. JavaScriptでよく使われる入力文と出力文1...

Node.js を使用してパスワード ジェネレータを作成するための完全な手順

目次1. 準備2. コマンドラインの記述2.1 バージョンと説明を追加する2.2 パスワードの長さを...

CentOS 6.5 に MySQL 5.6 をインストールするチュートリアル

1. Linuxに対応するRPMパッケージをダウンロードする5.6 より前のバージョンhttp://...

Vuex のコアコンセプトと基本的な使用法の詳細な説明

目次導入始めるインストール①直接ダウンロードする方法②CND法③NPM方式④糸法NPMインストールの...

VUE+Canvasはデスクトップピンボールブロック破壊ゲームのサンプルコードを実装します

誰もがピンボールやレンガ崩しのゲームをプレイしたことがあるでしょう。左と右のキーを使用して、下にある...

MySQLのスレッド実行の急増とクエリの遅延の問題を解決する

目次背景問題の説明原因分析CPUクエリが遅い接続数分析する拡大する総括する背景新年を迎える前は、一年...

この記事は、Dockerにおけるcgroupの具体的な使用法を徹底的に理解するのに役立ちます。

目次cgroupとはcgroupの構成cgroupが提供する機能cgroup 内の CPU を制限す...

Windows 10 で MySQL をダウンロードするための詳細なチュートリアル

MySQL のバージョンは、Enterprise Edition と Community Editi...

MySql ストアド プロシージャ パラメータの初歩的な使用法の詳細な説明

パラメータでのストアドプロシージャの使用IN パラメータは、プロシージャに情報を渡すためにのみ使用さ...

HTML 選択ボックスのプレースホルダーの作成に関する問題

テキスト入力でプレースホルダーを使用していますが、問題なく動作します。しかし、選択ボックスにはプレー...

MySQL 20 の高性能アーキテクチャ設計原則 (収集する価値あり)

オープンソース データベース アーキテクチャの設計原則01. 技術の選択最も使い慣れていて、最大限に...

MySQL の厄介な Aborted 警告をケーススタディで分析する

この記事では主に、MySQL の Aborted アラームに関する関連コンテンツを紹介し、参考と学習...

WeChatアプレットシングルページアプリケーションルーティングを徹底的に理解するための10分

シングルページアプリケーションの特徴「前提:」Web ページには、クリックするとサイト内の他のページ...

VirtualBox を使用して Linux クラスターをシミュレートする方法

1. ホストMacbookにHOSTをセットアップする前回のドキュメントでは仮想マシンの静的 IP ...