单击按钮时,我具有以下原型(prototype)代码来触发过程:

jQuery("#queue-process").click(function() {
    jQuery("#queue-process").attr("disabled", "disabled");
    try {
        processQueue();
    } catch (e) {
        console.log(e.message);
    } finally {
        jQuery("#queue-process").removeAttr("disabled");
    }
});

始终会调用processQueue函数,但是仅当我在Chrome JavaScript控制台中调试匿名函数时才调用attr("disabled", "disabled"),即,如果我在该行上放置一个断点并单步执行,则它可以工作,但在调试器外部仅processQueue()执行。

为什么会这样呢?

最佳答案

当您也不调试时,它可能正在执行。

我的猜测是processQueue()立即返回,因此代码立即转到了finally块,并且立即重新启用了该组件,因此您实际上看不到它。如果进行调试,则会阻止执行,并且可以看到该组件已被禁用。

processQueue到底在做什么?如果正在执行一些Ajax工作,请记住,默认情况下,Ajax请求是异步执行的。也许您需要将回调函数传递给processQueue,所以仅在工作完成时重新启用#queue-process?

10-06 04:44