另一个应该很简单,但给我带来麻烦。我想了解jQuery的.Deferred()和.promise()功能,以便延迟某些操作,直到递归函数完成。目前,我的代码是类似于以下内容:等待一个递归的jQuery函数完全完成
function showText(setTarget, setMessage, setIndex, setInterval) {
var defer = jQuery.Deferred();
var doShowText = function (target, message, index, interval) {
if (index < message.length) {
$(target).append(message[index++]);
setTimeout(function() { doShowText(target, message, index, interval); }, interval);
}
else {
alert("Done!");
defer.resolve();
}
};
doShowText(setTarget, setMessage, setIndex, setInterval);
return defer.promise();
}
function startButtonClick() {
displayElement($("#getElement"));
showText($("#getElement > h1"), "This text will slowly write to the screen.", 0, 50).promise()
.then(alert("Finished."));
}
在运行此,“完成”警报(这我试图推迟)运行递归脚本的第一执行之后,所以它会出现只有一个时字母已打印(不是预期的结果)。然而,一旦所有的字母被打印并且递归完成,“完成”警报就会正确显示,所以看起来好像我的延期变量在那之前不应该被解决。任何人都可以帮助我发现为什么“完成”警报在这里被称为早?任何帮助表示赞赏!
编辑:我意识到我不小心发布了一个稍微老一点的代码版本。它已更新为正确版本(运行时的行为相同)。
非常感谢你到两个谁回答!将警报放入函数中修复它。 =)标记为正确,因为他先来了,但两个答案都是正确的,我删除了额外的'promise()'。再次感谢! – user2912928