Причина, по которой он не работает при вводе второго имени, заключается в том, что вы вызываете функцию test()
, возвращающую отложенный объект , который затем добавляет вам исходный вызов test()
allowдоступ к методам обратного вызова, таким как .then()
, .fail()
и .done()
.
Однако, если вы не получаете ввод, вы не хотите, вы снова вызываете функцию test()
, которая создает NEW отложенный объект .Таким образом, исходный вызов 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!"); });
Это вы ссылались на ЖЕ отложенный объект и не создавать новый каждый раз, когда запускается функция test()
.
Видеть, как он работает здесь