我的代码类似于以下内容:
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');
});
}
这让我疯了 - 我必须知道我可以依赖我的代码,或者我可能也不会打扰,所以请帮忙。