質問

私が理解したことから、非同期コードを呼び出す3つの方法があります。

  1. イベント、例 request.on("event", callback);
  2. コールバック、例 fs.open(path, flags, mode, callback);
  3. 約束

私はそれを見つけました ノードプロモーションライブラリ しかし、私はそれを理解していません。

誰かが約束が何であるかを説明できますか、そしてなぜ私はそれを使用する必要がありますか?

また、なぜnode.jsから削除されたのですか?

役に立ちましたか?

解決

node.jsの約束は、いくつかの作業を行うことを約束し、その後、成功と失敗のために実行される個別のコールバックがあり、タイムアウトの処理が行われました。 node.jsで約束を考えるもう1つの方法は、それらが2つのイベントのみを放出できるエミッターであるということでした。成功とエラーです。

約束についてのクールなことは、それらを依存関係チェーンに結合できることです(約束した場合にのみ約束します。 約束Bが完了します)。

Core Node.jsからそれらを削除することにより、コアの上にある可能性のあるさまざまな約束の実装を備えたモジュールを構築する可能性を生み出しました。これらのいくつかはです ノードプロモーション先物.

他のヒント

この質問にはまだ多くの見解があるので(私のような)私はそれを指摘したかった:

  1. ノードプロモーション 私にはかなり死んでいるように見えます(最後のコミットは約1年前でした)、テストはほとんど含まれていません。
  2. 先物 モジュールは私には非常に肥大化しているように見え、ひどく文書化されています(そして、命名規則はただ悪いと思います)
  3. 行くための最良の方法はそうです Qフレームワーク, 、アクティブで十分に文書化されています。

約束とは、いわば操作の「最終的な」結果を表す「もの」です。ここで注意すべき点は、の詳細を抽象化するということです いつ 何かが起こり、何が起こるべきかに集中することを可能にします それが起こること。これにより、コールバック内のコールバック内にコールバックを使用する代わりに、コードが多少のようになります。

 var request = new Promise(function(resolve, reject) {
   //do an ajax call here. or a database request or whatever.
   //depending on its results, either call resolve(value) or reject(error)
   //where value is the thing which the operation's successful execution returns and
   //error is the thing which the operation's failure returns.
 });

 request.then(function successHandler(result) {
   //do something with the result
 }, function failureHandler(error) {
  //handle
 });

約束の仕様は、約束があると述べています

then

メソッドは、指定されたサクセスハンドラーまたは故障ハンドラーコールバックが終了したときに満たされる新しい約束を返す必要があります。これは、実行する必要がある非同期タスクのセットがあり、コールバックを使用しているかのように操作のシーケンスが保証されることを保証することができることを意味します。したがって、コールバック内のコールバック内でコールバックを渡す代わりに、チェーンされた約束を持つコードは次のように見えます。

var doStuff = firstAsyncFunction(url) {
                return new Promise(function(resolve, reject) {
                       $.ajax({
                        url: url,
                        success: function(data) {
                            resolve(data);
                        },
                        error: function(err) {
                             reject(err); 
                        } 
                  });
               };
doStuff
  .then(secondAsyncFunction) //returns a promise
  .then(thirdAsyncFunction); //returns a promise

約束と、なぜ彼らが超クールなのかについて詳しく知るために、ドメニックのブログをチェックアウトしてください。 http://domenic.me/2012/10/14/youre-missing-the point-of-promises/

これ 新しいチュートリアル の著者からの約束について PouchDB おそらく私がどこでも見た中で最高です。それは、他のチュートリアルであっても、正しい使用パターンやまだ一般的に使用されているいくつかのアンチパターンでさえ、あなたが正しい使用パターンやいくつかのアンチパターンを示す古典的なルーキーの間違いを賢くカバーしています!!

楽しみ!

PS他の質問は他の人によくカバーされているので、この質問の他の部分には答えませんでした。

マイク・トーティ 一連のビデオがあります, 、それぞれが10分未満の長さで、WINJSがどのようにライブラリが機能するかを説明しています。

これらのビデオは非常に有益であり、マイクはいくつかの適切に選択されたコードの例を使用して、Promise APIの力を示すことができます。

var twitterUrl = "http://search.twitter.com/search.json?q=windows";
var promise = WinJS.xhr({ url: twitterUrl });

 promise = promise.then(
     function (xhr) {
     },
     function (xhr) {
         // handle error
     });

例外がどのように対処されるかの扱いは特に良いです。

WINJSの参照にもかかわらず、これは一般的な関心のあるビデオシリーズです。なぜなら、Promise APIは多くの実装で広く類似しているからです。

お返事お願いします Promise/A+テストスイートに合格する軽量の約束の実装です。 APIは、WINJSインターフェイスとスタイルが似ているため、APIがとても好きです。

2014年4月の更新

ちなみに、WINJSライブラリ これでオープンソースになりました.

約束のもう1つの利点は、コールバックでそれを処理しようとするよりも、エラー処理と例外投げとキャッチングがはるかに優れていることです。

青い鳥 ライブラリは約束を実装し、非常に長いスタックトレースを提供し、非常に高速であり、猛攻撃のエラーについて警告しています。また、他のPromiseライブラリよりも速く、より少ないメモリを使用しています。 http://bluebirdjs.com/docs/benchmarks.html

約束とは何ですか?

約束は、非同期操作の結果を表す単なるオブジェクトです。次の3つの状態のいずれかで約束があります。

保留中 ::これは初期の状態であり、約束が満たされたり拒否されたりしないことを意味します。

満たされた ::これは、約束が満たされたことを意味し、約束によって表される価値が使用されることを意味します。

拒否 ::これは、操作が失敗したため、約束を果たすことができないことを意味します。州とは別に、私たちが本当に理解する必要がある約束に関連する3つの重要なエンティティがあります

  1. 執行者関数:: executor関数は、実行する必要があり、その結果が約束によって表される非同期操作を定義します。 Promiseオブジェクトが初期化されるとすぐに実行を開始します。

  2. Resolve :: Resolveは、エグゼキューター関数に渡されるパラメーターであり、エグゼキューターが正常に実行された場合、このResolveは結果の合格と呼ばれます。

  3. 拒否::拒否は、エグゼキューター関数に渡される別のパラメーターであり、エグゼキューター関数が失敗したときに使用されます。障害の理由は拒否に渡すことができます。

したがって、Promiseオブジェクトを作成するたびに、執行者を提供し、解決し、拒否する必要があります。

参照 :: 約束

また、最近node.jsで約束を検討しています。デートするまで when.js その速度とリソースの使用により行く方法のようですが、ドキュメントは Q.JS 私にもっとよく理解してくれました。したがって、when.jsを使用しますが、Q.JSドキュメントは主題を理解してください。

から Q.JS githubのreadme:

関数が値を返したり、ブロックせずに例外をスローできない場合、代わりに約束を返すことができます。約束とは、関数が最終的に提供する可能性のあるリターン値またはスローされた例外を表すオブジェクトです。約束は、遅延を克服するためのリモートオブジェクトのプロキシとしても使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top