ステップ1: フレームワークを構築する1. まず、ここに promise 関数本体を配置し、次に、resolve および deny 実行関数を追加する必要があります。 関数 Promise(エグゼコター) {} 2. 元のPromiseにはthenとcatchという2つの主なメソッドがあるので、thenとcatchをPromiseのプロトタイプに追加する必要があります。 Promise.prototype.then = 関数 (onResolved、onRejected) {} Promise.prototype.catch = 関数 (onRejected) {} 3. Promise に、resolve、reject、all、race などの一般的なメソッドをいくつか追加します。 解決: 指定された結果を持つPromiseオブジェクトを返します Promise.resolve = 関数 (値) { } 拒否: 失敗ステータスを返すメソッド Promise.reject = 関数 (値) { } all: プロミス オブジェクトを返します。この状態は、すべてのプロミスが返された場合にのみ成功したと見なされます。 Promise.all = 関数 (値) { } race: 最初に返されたオブジェクトによって状態が決定される Promise オブジェクトを返します。レース内のどの関数が最初に実行されても、最初の値が直接返され、他の関数は引き続き実行されます。 Promise.race = 関数 (値) { } 4. mypromiseの世界宣言 window.Promise = プロミス 5. 上記のすべての内容をラップする自己実行関数を作成する (関数 (ウィンドウ) { })() ステップ2 構築されたPromiseフレームワークに入力する1. 関数Promise()を記入する (1) let self = this は関数内の this を修正します。この this は後で大きな役割を果たします。 (2)self.status = 'pending'はPromise関数本体に基本ステータス'pending'を追加します。 (3)self.data = undefinedは、resolveによって返された結果を格納するためのデータソースを作成します。 (4) self.callbacks = [] はプロミス内のすべてのコールバックを保存するための配列を作成します。 2. 関数resolve()に記入する (1) if (self.status !== 'pending') { return } 現在の受信プロセスのステータスが保留中かどうかを確認します。保留中の場合は、次の操作を続行します。保留中でない場合は、直接戻ります。
(2)self.status = 'resolved'はプロセスのステータスを解決済みに変更します。 (3)self.data = valueは、その後のコールバックで使用される値を保存します。 (4)最も重要な実行関数部分を配置します。sele.data内に実行すべきコールバック関数がある場合は、すぐに非同期で実行します。 (自己コールバックの長さ>0)の場合{ タイムアウトを設定する(() => { self.callbacks.forEach(callbackObj => { callbackObj.onResolved(値) }) }, 0) } 3. 関数reject()を埋め込む (1)resolve関数と同じ、ここでは省略 4. 実行メソッドを入力する プロミス本体の実行中にエラーが発生した場合、エラー メッセージが catch 関数によってキャプチャされ、関数にジャンプして、reject ステートメントを個別に実行します。 試す { 実行者(解決、拒否) } キャッチ(エラー){ 拒否(エラー) } 5. .then関数に入力する まず、着信プロセスの状態を区別する必要があります。保留中の場合は、コールバック関数を保存します。保留中でない場合は、実行すべきことを実行します。 (1)if (self.status === 'pending') 現在のステータスが保留中の場合、それを保存します 自己.コールバック.プッシュ({ onResolved() { onResolved(self.data) }, onRejected() { onRejected(self.data) } }) (2) else if (self.status === 'resolved') ステータスが解決されている場合 楽しく実行してみましょう。 タイムアウトを設定する(() => { 自己データ解決時 }, 0) しかし、resolve が実行されていないのに状態が変わった状態があります。resolve は実行できず、代わりに declined を実行します。 それ以外{ タイムアウトを設定する(() => { 拒否された場合(self.data) }, 0) } 象を冷蔵庫に入れるのと同じくらい「簡単」な2つのステップを経て、私たちはシンプルなPromiseを実装しました。 簡単ですよね?友達を呼んで一緒に試してみましょう! 要約するシンプルなプロミスの実装に関するこの記事はこれで終わりです。シンプルなプロミスの実装の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: ブートストラップ学習体験のまとめ - CSS スタイル デザイン共有
パブリックアカウントのファンデータを同期してバッチプッシュするときに、サーバーがエラー502を報告し...
まず、ハードディスクデバイスにデータディスクがあるかどうかを確認します # まずfdisk -lを実...
この記事では、Linux コマンドを使用して .sql ファイルをエクスポートおよびインポートする方...
質問Nginx リバース プロキシの後、Tomcat アプリケーションは、クライアント ブラウザーの...
達成される効果多くの場合、入力ボックスの値の変化をリアルタイムで監視し、ブラウザを誘導してウェブサイ...
この記事の例では、カスケードセレクターを実装するためのelementUIの具体的なコードを参考までに...
CSSスタイルの分類1. 内部スタイル ---- インラインスタイルスタイルタグの使用 <ス...
この記事では、ランダムロールコーラーを実装するためのJavaScriptの具体的なコードを参考までに...
時には、Web ページに掲載されているコンテンツが悪意のある人物に盗用されるのを望まないため、Web...
この記事は主にJavaScriptを使用してWeb計算機を実現する効果を記録し、参考として掲載してい...
CSS3変数について変数を宣言するときは、変数名の前に 2 つのハイフン ( -- ) を追加します...
ドラッグ アンド ドロップ API は、ドラッグ可能な要素を HTML に追加し、ドラッグ可能な豊富...
アニメーションアニメーションを定義します。 /*アニメーションの各ステップで実行されるアクションを定...
トイ・ストーリー3 オンラインマーケティングウェブサイトゼンモバイル鉄から鉄へスプラウトファンドバー...
私は最近、YouTube の CSS アニメーション効果チュートリアル シリーズをフォローしています...