回调后代码的最佳实践

时间:2012-11-18 07:30:55

标签: javascript node.js callback

这就是我想要做的事情。

我目前正在使用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
}

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

有人可以建议更好的解决方案吗?有没有我不知道的最佳做法?我对这种函数式编程非常环保。

2 个答案:

答案 0 :(得分: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
});

答案 1 :(得分:1)

考虑使用jQuery Deferred对象,并添加一个方法来执行'always'

jQuery Deferred Object Documentation