我做错了什么?
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!"); });
答案 0 :(得分:3)
它对第二个名称输入无效的原因是,您正在调用函数test()
,返回deferred object,然后添加原始调用test()
的功能允许访问.then()
,.fail()
和.done()
等回调方法。
但是,如果您没有收到输入,则不会再次调用函数test()
,这会创建 NEW deferred object。因此,您添加test()
回调的done()
原始调用将永远不会收到回调。
将其更改为:
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()
函数时都不创建新的。{/ p>
查看工作 here