Javascript Ajax承诺使用父/子函数

Javascript Ajax承诺使用父/子函数,javascript,jquery,ajax,promise,Javascript,Jquery,Ajax,Promise,我使用了一个ajax调用来对照DB检查键入的标记值。taggle文档在onBeforeTagAdd事件上指定return false,以防止添加标记,但我知道这不能用ajax完成,因为它是异步的。我还看到过其他一些问题,这些问题建议承诺让函数依赖于ajax响应,但当ajax调用位于依赖其响应的父函数内部时,我不知道如何使用承诺——有人能给出建议吗?下面是ajax调用的代码: new Taggle('tagexample', { onBeforeTagAdd: function(event

我使用了一个ajax调用来对照DB检查键入的标记值。taggle文档在
onBeforeTagAdd
事件上指定
return false
,以防止添加标记,但我知道这不能用ajax完成,因为它是异步的。我还看到过其他一些问题,这些问题建议承诺让函数依赖于ajax响应,但当ajax调用位于依赖其响应的父函数内部时,我不知道如何使用承诺——有人能给出建议吗?下面是ajax调用的代码:

new Taggle('tagexample', {
    onBeforeTagAdd: function(event, tag) {
        // return false here would prevent tag from being added
        $.ajax({
            method:"POST",
            url:"inputcheck.php",
            data:"tag="+tag,
            dataType:"html",
            success:function(result){
                alert(result);
                if (result == 'no') {
                    // return false here won't work
                }
            }

        });
    },
});

Taggle需要支持onBeforeTagAdd方法上的承诺,从外观上看,它不支持承诺

我能想到的唯一可行的方法是总是返回false(在ajax调用完成之后),然后动态创建标记(如果是)

new Taggle('tagexample', {
    onBeforeTagAdd: function(event, tag) {
        $.ajax({
            method:"POST",
            url:"inputcheck.php",
            data:"tag="+tag,
            dataType:"html",
            success:function(result){
                alert(result);
                if (result == 'yes') {
                    // create tag
                }
            }

        });

        return false;
    },
});

重新设计应用程序,以便首先将所有允许的标记从服务器查询到客户端数组中,然后可以在
onBeforeTagAdd
事件处理程序中使用该数组,而无需在那里进行任何Ajax调用。像您正在使用的回调API要么支持异步结果,要么不支持异步结果。如果没有,你就无法从外部做任何事情。你可以修改Taggle源代码,你可以预先检查预期的标记,以便同步地获得它们的信息,或者你可以改变设计,以另一种方式解决问题。我不知道为什么这会被否决。如果Taggle API不支持对验证的异步响应,那么您无法从其代码之外让它这样做。这个答案暗示了一个可能的解决办法,它并不完美,但我希望看到其他人在投票表决之前提出更好的想法(除了修改标记代码本身)。