4

JavaScript コールバックを別のスタイルで実行する方法を考えています。

私の現在のスタイルのコールバックは、コールバックを関数に渡し、関数はコールバックを呼び出します。例えば:

関数呼び出し

doSomething(function(data){
   console.log(data);
});

関数

function doSomething(callback) {
    // Call the callback
    callback("someData");
}

これは、私が使用しているコールバックの現在のスタイルです。しかし、別のスタイルでコールバックを行うライブラリを見てきました。例えば:

関数呼び出し

doSomething().success(function(data){
   console.log(data);
});

これはどのように機能しますか?誰かが私のために簡単な例を概説できますか? 御時間ありがとうございます。

4

3 に答える 3

4

これは promise ライブラリの実装です。jQueryには deferreds と呼ばれる実装があり、もう 1 つはQです。

doSomethingjQueryを使用すると、次のようになります。

function doSomething() {
   var dfd = $.deferred();
   // do your logic
   // eventually call dfd.resolve();
   return dfd.promise();
}

それを呼び出して、使用します

doSomething().then(function() {
   // do something else
});

このパターンの優れている点は、複数のコールバックとエラー コールバックを使用できることです。

于 2013-07-12T10:49:30.553 に答える
3

あなたが説明しているスタイルは、一般的にプロミスと呼ばれます。jQueryにはpromiseがありますが、ドキュメントではそれらを「Deferreds」と呼んでおり、これはPromises/A仕様の実装です。Qを含む、他にもいくつかの promises ライブラリがあります。(YUI には promises の実装も含まれています。)

promise に関する最近 (2013 年半ば) のブログ投稿がたくさんあるので、パターンと特定の実装の両方について、promise に関する詳細情報を簡単に見つけることができるはずです。いくつかの実装のソース コードを掘り下げて基本を確認することは価値がありますが、大まかに言えば、次のような約束を考えることができます。

  • promise で非同期関数をラップすると、それが呼び出されます。
  • その後、promise 自体が返されます。つまり、それへの参照を変数に保存できます。
  • 呼び出した非同期関数が完了すると、promise 自体が解決 (または「実行」) されます。
  • 次にdone、コールバック関数を引数として に渡し、解決された promise を呼び出すことができますdone
于 2013-07-12T10:57:41.880 に答える
1

これは単にここにあるのではありませんか:

関数

doSomething = new Object();

doSomething.success = function(callback) {
    // Call the callback
    callback("someData");
}

したがって、関数であるメンバー「success」で拡張された単なるオブジェクトです。

于 2013-07-12T10:54:39.387 に答える