1

我做错了什么?

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!"); });
4

1 回答 1

4

它在第二个名称输入上不起作用的原因是,您正在调用一个函数test(),返回延迟对象,然后为您的原始调用添加test()允许访问回调方法的能力,如.then(),.fail().done().

但是,如果你没有得到你想要的输入,你就不会test()再次调用该函数,这会创建一个NEW deferred objecttest()因此,您添加回调的原始调用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!"); });

这是您引用相同的 延迟对象,而不是在每次函数test()运行时创建一个新对象。

看到它在这里工作

于 2011-02-12T21:13:25.187 回答