Javascript 优雅地经过一个;单击事件";通过多次回调

Javascript 优雅地经过一个;单击事件";通过多次回调,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,当一个未登录的用户点击一个给定的按钮时,我想停止事件,收集他的oauth,如果我没有,收集他的电子邮件,然后执行事件 我想用javascript做所有的事情,因为这样会使事情变得简单得多 这就是我执行它的方式,我有两个问题: 有没有一种更优雅的方法来执行多级回调 我在最后触发事件的方式似乎有些不妥。有什么更好的方法 考虑将单击事件回调存储在变量中。当用户单击按钮时,JS首先检查它是否经过身份验证。如果是,则执行回调。如果不是,则将回调作为参数传递给身份验证例程。当身份验证例程成功时,它可以执行回

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

我想用javascript做所有的事情,因为这样会使事情变得简单得多

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

  • 有没有一种更优雅的方法来执行多级回调
  • 我在最后触发事件的方式似乎有些不妥。有什么更好的方法
    考虑将单击事件回调存储在变量中。当用户单击按钮时,JS首先检查它是否经过身份验证。如果是,则执行回调。如果不是,则将回调作为参数传递给身份验证例程。当身份验证例程成功时,它可以执行回调。

    这是怎么回事:

    if (success = true) {
    
    ?

    您知道是否将全局变量“success”设置为true,对吗?如果要检测变量“success”是否等于true,请使用以下命令:

    if (success === true) {
    
    注意3个相等的标记

    通过对代码进行严格翻译,我得到了以下结果:

    //After everything is done, you want to execute this
    function afterEmail(event) {
        $(event.currentTarget).trigger(event.type);
    }
    
    //2nd level function
    function collectEmail(event) {
        console.log("Collecting email");
        if (success === true){
            afterEmail(event);
        } else {
            failFn();
        }
    }
    
    //1st level function
    function authentication(event) {
        if (success === true) {
            collectEmail(event);
        } else {
            failFn();
        }
    }
    
    jQuery("a.callbacktesting").click(function (event) {
        if (success === false) {
            event.preventDefault();
            event.stopImmediatePropagation();
    
            authentication(event);
        }
    });
    

    如果您试图触发DOM事件,则需要使用jQuery.trigger或类似工具。我需要有关您的程序的更多信息以提供更多帮助。

    Hmmm,这就是我所做的-endevent:event,我将事件直接作为参数放置。问题是如何将click事件存储为变量并执行它。我找不到执行它的命令(event.XXX)
    //After everything is done, you want to execute this
    function afterEmail(event) {
        $(event.currentTarget).trigger(event.type);
    }
    
    //2nd level function
    function collectEmail(event) {
        console.log("Collecting email");
        if (success === true){
            afterEmail(event);
        } else {
            failFn();
        }
    }
    
    //1st level function
    function authentication(event) {
        if (success === true) {
            collectEmail(event);
        } else {
            failFn();
        }
    }
    
    jQuery("a.callbacktesting").click(function (event) {
        if (success === false) {
            event.preventDefault();
            event.stopImmediatePropagation();
    
            authentication(event);
        }
    });