検索

ホームページ  >  に質問  >  本文

タイトルを次のように書き換えます: 既存のコールバック API を Promise フォームに変換する方法?

<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粉268654873P粉268654873570日前468

全員に返信(2)返信します

  • P粉618358260

    P粉6183582602023-08-22 16:14:21

    今日、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

    P粉6800875502023-08-22 11:07:09

    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
  • キャンセル返事