调试时未触发jQuery延迟完成方法

时间:2013-10-16 15:53:11

标签: jquery debugging firefox firebug jquery-deferred

我有一个方法正在进行jquery ajax调用。当您使用$.ajax时,该方法返回由jquery创建的延迟对象:

function callWebservice() {
    return $.ajax({
        type: "POST",
        url: "/echo/json/",
        data: {delay: 2}
    });
}

在调用该方法之后,我在代码中的不同位置有一些“完成”处理程序(可以访问该方法返回的Deferred):

$(function () {
    var dfr = callWebservice();
    dfr.done(function() { console.log('done 1');})
    dfr.done(function() { console.log('done 2');})
    dfr.done(function() { console.log('done 3');})
    dfr.done(function() { console.log('deferred state 2: ' + dfr.state());})
    console.log('deferred state 1: ' + dfr.state());
});

当我运行该代码时,一切似乎都很好:我可以在控制台中看到5行,最后一行是:'延迟状态2:已解决'。
然而,当我设置一个断点时,让我们说第二个done 并等待webservice调用返回,那么这四个done处理程序都不会被调用。在控制台中是'延迟状态1:待处理'。

这是预期的行为吗?由于调试,延迟对象是否无法将其状态更改为“已解决”?或者我没有以正确的方式使用它?

我创建了fiddle,因此您可以轻松模拟此行为。

[UPDATE]
它似乎确实在使用chrome。此外,当在IE10中调试它时,它按预期工作。 当使用Firefox的内置调试工具时,它也可以工作..所以看起来这是Firebug中的一个错误。

1 个答案:

答案 0 :(得分:2)

它确实是bug in Firebug,或者更确切地说是在它使用的旧的Firefox调试器API中称为JSD。 只要Firebug switched to the new JSD2 API planned for the next major release

,就会修复此错误

塞巴斯蒂安