如何编写优雅的回调函数?

时间:2014-10-26 20:21:45

标签: javascript functional-programming

我在处理回调时遇到问题,问题是很难编写和遵循代码,特别是对于其他程序员。错误是很难做的,当我编写函数时,我有时会注意到错误,我想知道是否有一种优雅的方法来重写代码以防止它。

当前示例是一个包装函数,用于发送AJAX调用,并根据响应执行退休或其他逻辑:

按下一个按钮,触发buttonHandler,但我们不想直接调用ajax方法,而是围绕ajax方法执行某些逻辑的函数设置一组包装函数。

      buttonHandler : function() {
    var that = this;
    var success = function() {
      that.setState({status : "okay"});
    };
    var failiure = function() {
      that.setState({status : "sorry it failed!"});
    };
    this.call(success, failiure);
   },
   // our wrapper of the ajax call
   call : function(success_callback, fail_callback) {
    var that = this;
    var successHandler = function(status, newUrl) {
      // 200 ok
      if (status === 200) {
         success_callback();
      }
      // Follow the 302 redirect
      if (status === 302) {
        //do something with newUrl and...
        console.log("following");
        that.fakeAjaxCall(successHandler, errorHandler);
      }
    };

    var errorHandler = function(status){
      //retry if 503
      if (status === 503) {
        console.log("retrying");
        that.fakeAjaxCall(successHandler, errorHandler);
      }
    };

    this.fakeAjaxCall(successHandler, errorHandler);
   }

jsbin link:http://jsbin.com/hivawuheko/1/

这里可能犯的错误是

  • 有人在虚假的ajax调用中调用success_callback而不是successHandler,似乎真的很容易在这里犯错误
  • 命名变得困难,我们应该调用类似“success_callback”和“outer_wrapper_use_this_only”的函数吗?

因此,我正在寻找的是一种解决这种将代码插入回调链的一般问题的方法,但仍然可以从团队合作的角度对代码进行维护和添加,其中有些人可能想要更改和编辑函数。

请注意,我之前写的错误只会在某些情况下破坏代码,并且可能以几乎不可见的方式。

0 个答案:

没有答案
相关问题