Jquery 延迟点击返回承诺?

Jquery 延迟点击返回承诺?,jquery,jquery-deferred,promise,Jquery,Jquery Deferred,Promise,是否可以使用该结构延迟单击响应 所以我得到了一个click事件,它触发并调用一个长时间(ish)运行的进程,即延迟进程。我只想在延迟进程完成时从单击返回,即 $('form .modalPopupSearch').click(function (e) { //return once the dialogopen event is complete and not before! $("#divSearching").dialog('open'); }); 我以为只需将pr

是否可以使用该结构延迟单击响应

所以我得到了一个click事件,它触发并调用一个长时间(ish)运行的进程,即延迟进程。我只想在延迟进程完成时从单击返回,即

$('form .modalPopupSearch').click(function (e) {
     //return once the dialogopen event is complete and not before!
     $("#divSearching").dialog('open');

});
我以为只需将
promise()
添加到此中就可以做到:

$('form .modalPopupSearch').click(function (e) {
     //return once the dialogopen event is complete and not before!
     $("#divSearching").dialog('open');

}).promise();

但事实并非如此。这是可能的还是只是不以这种方式连接?

异步机制(如
延迟
承诺
的一个要点是阻止主JavaScript线程的执行

不,在jQuery UI
对话框
关闭之前,不能让
单击
处理程序等待完成。您的代码确实等待对
对话框的调用返回(当然),但很自然,该调用只会打开对话框


相反,允许处理程序完成(可能停止事件的传播和/或默认操作)并使用对话框的回调来触发您想要执行的任何后续操作。

异步机制的一个要点,如
延迟
承诺
而不是,以阻止主JavaScript线程的执行

不,在jQuery UI
对话框
关闭之前,不能让
单击
处理程序等待完成。您的代码确实等待对
对话框的调用返回(当然),但很自然,该调用只会打开对话框


相反,允许处理程序完成(可能停止事件的传播和/或默认操作),并使用对话框的回调来触发您想要执行的后续操作。

不,您不能。你必须马上回来,否则就不回来了。但是,您可以将对承诺对象的引用存储在click事件外部可用的变量中,然后在对话框关闭时解析它。但是请注意,它只会解决一次,所以如果所述事件可以发生多次,那么它将是非常无用的。不,您不能。你必须马上回来,否则就不回来了。但是,您可以将对承诺对象的引用存储在click事件外部可用的变量中,然后在对话框关闭时解析它。但请注意,它只会解决一次,所以如果所说的事件可以发生多次,那将是非常无用的。该死,这就是我所想的。我尝试过你提到的方法,但这破坏了一些自动化测试,因为它认为点击已经返回,但没有等待“后续脚本”完成。谢谢你的邀请answer@Liam:您的自动测试工具应具有等待片刻的功能。例如,Selenium有。是的,它有,但测试人员说这需要很长时间才能实现(@Liam:Nice.:-)好吧,这是一个非常普遍的模式,我想测试人员将不得不应付。:-)该死,我就是这么想的。我尝试过你提到的方法,但这破坏了一些自动化测试,因为它认为点击已经返回,但没有等待“后续脚本”完成。谢谢你的邀请answer@Liam:您的自动测试工具应具有等待片刻的功能。例如,Selenium有。是的,它有,但测试人员说这需要很长时间才能实现(@Liam:Nice.:-)好吧,这是一个非常普遍的模式,我想测试人员将不得不应付。:-)