优雅地通过多个回调传递"点击事件"

min*_*eow 5 javascript asynchronous callback

当非登录用户点击给定按钮时,我想停止事件,收集他的oauth,如果我没有它,则收集他的电子邮件,然后执行该事件.

我想在javascript中做所有事情,因为这会让事情变得更加简单.

这就是我执行它的方式,我有两个问题:

  1. 有更优雅的方式进行多级回调吗?
  2. 我在最后触发事件的方式似乎是hackish.有什么可能是更好的方法呢?
  jQuery("a.callbacktesting").click(function(event){

    if (success==false){
      event.preventDefault();
      event.stopImmediatePropagation();
      authentication({endevent:event,followup:afterEmail},collectEmail, failFn);
    }
  });

  //1st level function
  function authentication(params, successFn, failFn){
      if (success=true){
        successFn(params,params.followup,failFn);
      }else{
       failFn();
      }      
  }

  //2nd level function
  function collectEmail(params, successFn, failFn){
      console.log("Collecting email");
      if (success=true){
        successFn(params);
      }else{
       failFn();
      };
  }

  //After everything is done, you want to execute this
  function afterEmail(params){
    jele=$(params.endevent.currentTarget)
    action=params.endevent.type
    jele.trigger(action);
  }
Run Code Online (Sandbox Code Playgroud)

Chr*_*nte 0

考虑将点击事件回调存储在变量中。当用户单击按钮时,您的 JS 首先检查它是否已通过身份验证。如果是,则执行回调。如果不是,它将回调作为参数传递给身份验证例程。当身份验证例程成功时,它就可以执行回调。