【问题标题】:jQuery Deferred resolve() don't workjQuery延迟解析()不起作用
【发布时间】:2011-02-12 19:59:16
【问题描述】:
我做错了什么?
function test()
{
var d = $.Deferred();
var name=prompt("Please enter your name","Harry Potter");
if (name=="aa")
d.resolve();
else
setTimeout(test, 1000);
return d.promise();
}
test().done(function() { alert("It's Ok!"); });
【问题讨论】:
标签:
jquery
jquery-deferred
【解决方案1】:
它在第二个名称输入上不起作用的原因是,您正在调用一个函数 test(),返回 deferred object,然后添加您对 test() 的原始调用的能力,允许访问回调方法,如.then()、.fail() 和 .done()。
但是,如果您没有得到您想要的输入,您将再次调用函数test(),这会创建一个NEW deferred object。因此,您添加了done() 回调的对test() 的原始调用将永远不会收到回调。
改成:
var d = $.Deferred();
function test()
{
var name=prompt("Please enter your name","Harry Potter");
if (name=="aa")
d.resolve();
else
setTimeout(test, 1000);
return d.promise();
}
test().done(function() { alert("It's Ok!"); });
这是您在引用 SAME deferred object 而不是在每次函数 test() 运行时都创建一个新的。
看到它工作了here