1

これが私がやろうとしていることです。

私は現在 node.js を使用していますが、それでできることの 1 つは次のとおりです。

socket.on("sometopic", function() { 
    // this is a callback
}

ここで、10 の異なるトピックがあり、それぞれに対応する 1 つの処理関数があり、それを「ウィンドウ」に保持しているとします。

windows.callbacks["topic_a"] = function() {
    // code for cb a
}

windows.callbacks["topic_b"] = function() {
    // code for cb b
}

windows.callbacks["topic_z"] = function() {
    // code for cb z
}

そして、すべての callbackの最後に実行したいコードがあります。簡単な方法は、このコードで関数を作成し、各コールバックの最後に呼び出しを追加することですが、これはエレガントとは言えません。

誰でもこれに対するより良い解決策を提案できますか? 私が知らないベストプラクティスはありますか? 私は、この種の関数型プログラミングにはかなり慣れています。

4

2 に答える 2

4
// THIS IS AN IDEA

// helper

function teardownWith(fn){
  return function (cb){
    return function(){
      return (cb(), fn());
    };
  };
}

// prepare a modified function

var endWithDate = teardownWith(function(){
  log(Date());
});

// pass our callback into the modified function
// endWithDate() returns the final callback.

window.callbacks["cb_a"] = endWithDate(function(){
   // code for cb_a
});
于 2012-11-18T08:37:26.990 に答える
1

jQuery Deferred オブジェクトを使用し、「常に」実行するメソッドを追加することを検討してください

jQuery 遅延オブジェクトのドキュメント

于 2012-11-18T07:38:23.883 に答える