jQuery promise .done稍后调用时失败

时间:2015-08-14 13:24:52

标签: jquery promise

我的代码类似于以下内容:

def = new $.Deferred;
def.resolve();
window.prom = def.promise();
alert(prom.state());
window.prom.done(function () {
    alert('done');
});

稍后将加载并运行以下代码,但不会生成“done2”警报。

alert('Check for resolved: '+prom.state());
window.prom.done(function () {
    alert('done2');
});

我需要知道为什么这不起作用。我已经确认承诺在第二个.done()点解决了,但它仍然没有触发。这是我第三次遇到与promises / deferred对象类似的问题。

我之前提出了一个项目here,但没有人帮忙。我开始认为我之前的'修复'不可靠。

我不明白为什么这不起作用。抱歉,我无法创建一个可以重现它的jsFiddle。从表面看来,这似乎是无稽之谈 - 我所读到的所有关于承诺和延期的东西(我在网上找到的很大一部分)都表示,如果你再添加一个.done,它会触发,但在某些情况下,它始终没有“T

我已经使用以下方法修复了它,但我认为不应该这样做。

go = false;    
if (window.prom && (window.prom.state() == 'resolved')) {
    go = true;
}

if (go) {
    alert('run immediately');
} else {
    window.prom.done(function() {
        alert('run asynchronously');
    });
}

这让我疯了 - 我必须知道我可以依赖我的代码,或者我可能也不会打扰,所以请帮忙。

0 个答案:

没有答案