コールバックはなぜプロミスよりも「密結合」されているのでしょうか? 質問する

コールバックはなぜプロミスよりも「密結合」されているのでしょうか? 質問する

次のフレーズを説明してもらえますか(Stack Overflowの質問への回答Javascript における Deferred、Promise、Future の違いは何ですか?)?

使用することのメリットは何ですか?jQuery以前の jQuery コールバックの使用に反対しますか?

コールバックを関数に直接渡すと、密結合されたインターフェースにつながる可能性がありますが、Promise を使用すると、同期または非同期のコードに対する懸念を分離できます。

ベストアンサー1

プロミスは非同期操作の結果を表すオブジェクトです、そのため、それを渡すことができ、より柔軟性が得られます。

コールバックを使用する場合は、非同期操作の呼び出し時に、それがどのように処理されるかを指定する必要があります。これが結合です。Promise を使用すると、後でそれがどのように処理されるかを指定できます。

ここで例を挙げます。Ajax 経由でデータを読み込み、その間に読み込みページを表示したいとします。

コールバックの場合:

void loadData = function(){
  showLoadingScreen();
  $.ajax("http://someurl.com", {
    complete: function(data){
      hideLoadingScreen();
      //do something with the data
    }
  });
};

返されるデータを処理するコールバックは、hideLoadingScreen を呼び出す必要があります。

Promise を使用すると、上記のスニペットを書き直して読みやすくすることができ、完全なコールバックに hideLoadingScreen を配置する必要がなくなります。

約束とともに

var getData = function(){
  showLoadingScreen();
  return $.ajax("http://someurl.com").promise().always(hideLoadingScreen);
};

var loadData = function(){
  var gettingData = getData();
  gettingData.done(doSomethingWithTheData);
}

var doSomethingWithTheData = function(data){
 //do something with data
};

アップデート:私は書いたブログ投稿追加の例を示し、Promise とは何か、その使用法をコールバックの使用法と比較するとどのようになるかについて明確な説明を提供します。

おすすめ記事