1

这就是我想要做的。

我目前正在使用 node.js,它允许您做的一件事是:

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

现在假设我有 10 个不同的主题,每个主题都有一个相应的处理函数,我保留在我的“窗口”中,如下所示:

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
}

我想在每个回调结束时执行一段代码。一个简单的方法是使用此代码创建一个函数并在每个回调的末尾添加一个调用,但这远非优雅。

谁能为此提出更好的解决方案?有没有我不知道的最佳实践?我对这种函数式编程相当陌生。

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 对象,并添加一个方法来执行 'always'

jQuery 延迟对象文档

于 2012-11-18T07:38:23.883 回答