タイトルを次のように書き換えます: 既存のコールバック API を Promise フォームに変換する方法?
P粉268654873
P粉268654873 2023-08-21 18:34:55
0
2
418
<p>Promise を使用して処理したいのですが、コールバック API の形式は次のとおりです。 </p> <h3>1. DOM ロードまたはその他の 1 回限りのイベント: </h3> <pre class="brush:php;toolbar:false;">window.onload; // コールバック関数として設定 ... window.onload = function() { };</pre> <h3>2. 通常のコールバック関数: </h3> <pre class="brush:php;toolbar:false;">関数リクエスト(onChangeHandler) { ... } リクエスト(関数() { // かわった ... });</pre> <h3>3. ノードスタイルのコールバック関数 (「nodeback」): </h3> <pre class="brush:php;toolbar:false;">function getStuff(dat, callback) { ... } getStuff("dataParam", function(err, data) { ... })</pre> <h3>4. ライブラリ全体でノード スタイルのコールバック関数が使用されます。</h3> <pre class="brush:php;toolbar:false;">API; API.one(関数(err, データ) { API.two(function(err, data2) { API.three(function(err, data3) { ... }); }); });</pre> <h3>Promise を使用してこの API を処理するにはどうすればよいですか?また、それを「約束」するにはどうすればよいですか? </h3>
P粉268654873
P粉268654873

全員に返信(2)
P粉618358260

今日、PromiseNode.js の通常の Javascript メソッドとして使用できるようになりました。

シンプルで基本的な Promise の例 (KISS メソッドを使用):

通常Javascript非同期APIコード:

リーリー

約束 Javascript 非同期 API コード:

リーリー

(この優れた情報源 にアクセスすることをお勧めします)

さらに、

PromiseES7async\await とともに使用して、プログラム フローを fulfilled まで待機させることもできます。結果は次のようになります: リーリー

同じコードを使用して、

.then() メソッドを使用できます。 リーリー

Promise

は、react-native などの Node.js ベースのプラットフォームでも使用できます。

ボーナス

: ハイブリッドアプローチ (コールバック メソッドには 2 つのパラメータ、つまり error と result があると仮定します) リーリー
上記のメソッドは、古いスタイルのコールバックと Promise の使用の結果に同時に応答できます。

###お役に立てれば。

いいねを押す +0
P粉680087550

Promise には状態があり、最初は保留状態であり、次のように解決できます。

  • Implemented計算が正常に完了したことを示します。
  • Rejected は、計算が失敗したことを意味します。

プロミス を返す関数は、例外 をスローせず、拒否を返す必要があります。 Promise を返す関数から例外をスローすると、} catch { .catch の両方を使用する必要があります。 Promise ベースの API を使用している人は、Promise が例外をスローすることを望んでいません。 JS の非同期 API がどのように機能するかわからない場合は、まず この回答を確認してください

1. DOM ロードまたはその他の 1 回限りのイベント:

したがって、Promise を作成するということは、通常、Promise がいつ解決されるかを指定することを意味します。つまり、データが利用可能である (および .then を使用してアクセスできる) ことを示すために、いつ Fulfilled または Rejected ステージに移行するかを指定することになります。

Promise コンストラクター (ネイティブ ES6 Promise など) をサポートする最新の Promise 実装を使用します:

リーリー

その後、生成された Promise を次のように使用できます:

リーリー

遅延をサポートするライブラリを使用します (ここでは例として $q を使用しますが、後で jQuery も使用します):

リーリー

または、jQuery に似た API を使用して、発生するイベントをフックします:

リーリー

2. 通常のコールバック:

JS ではコールバックが一般的であるため、これらの API は非常に一般的です。一般的なケースの onSuccessonFail を見てみましょう。 リーリー

Promise コンストラクター (ネイティブ ES6 Promise など) をサポートする最新の Promise 実装を使用します: リーリー

遅延をサポートするライブラリを使用します (ここでは例として jQuery を使用していますが、前に $q も使用しました):

リーリー

jQuery は

$.Deferred(fn) フォームも提供します。これには、次のように new Promise(fn) フォームに非常に近い式を記述できるという利点があります。下に示された :### リーリー 注: ここでは、jQuery の遅延

resolve

メソッドと reject メソッドが「分離可能」である、つまり、jQuery.Deferred() のメソッドにバインドされているという事実を利用します。 ### 例###。すべてのライブラリがこの機能を提供するわけではありません。 3. ノード スタイル コールバック (「nodeback」): Node スタイルのコールバック (ノードバック) には特定の形式があり、コールバックは常に最後のパラメーターであり、その最初のパラメーターはエラーです。まず手動で Promise に変換します:

リーリー ### に変換: ### リーリー

defer を使用すると、次のことができます (例として Q を使用しましたが、Q は現在新しい構文をサポートしています

その構文を使用することをお勧めします

):

リーリー

一般に、手動でものを Promise に変換しすぎないでください。Node 用に設計されたほとんどの Promise ライブラリと Node 8 のネイティブ Promise には、ノードバックを Promise に変換するためのメソッドが組み込まれています。例えば### リーリー

4. ライブラリ全体でノード スタイルのコールバックが使用されます:

ここに黄金律はありません。それらを 1 つずつ約束に変換することができます。ただし、一部の Promise 実装ではこれをバッチで実行できます。たとえば、Bluebird では、ノードバック API を Promise API に変換するのは次のように簡単です。 リーリー または、

Node

Native Promise

を使用します:

リーリー ###知らせ:###
  • もちろん、.then ハンドラー内では、物事を Promise に変換する必要はありません。 .then ハンドラーから Promise を返すと、Promise の値を使用して解決または拒否されます。また、プロミスを拒否する .then ハンドラーから例外をスローすることもお勧めします。これは、プロミススローの安全性として知られています。
  • 実際の onload の場合は、onX の代わりに addEventListener を使用する必要があります。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート