如何将Deffered从已解决的状态设置回初始状态?
我尝试创建一个新的队列,但在这种情况下,我将丢失到目前为止我添加的所有事件,如果我不先解决它。
是否可能存在Deferred的状态模型(处理 - >已解决...可能介于两者之间,如何从已解决到处理......)
这是我到目前为止所做的:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Demo</title>
<script src="jquery-1.8.3.min.js"></script>
<script>
var deferredReady = jQuery.Deferred();
$(function () {
$('#Queue1, #Queue2').click(function () {
var text = $(this).text();
deferredReady.done(function () {
$('<p>', {
text: text
}).appendTo('body');
});
});
$('#QueueReady').click(function () {
deferredReady.resolve();
});
$('#NewQueue').click(function () {
// deletes the old queue (resolve it first)
deferredReady = jQuery.Deferred();
});
});
</script>
</head>
<body>
<button id="Queue1">Add Comamnd to ready Queue</button>
<button id="Queue2">Add otherComamnd to ready Queue</button>
<button id="QueueReady">Set Queue to ready</button>
<button id="NewQueue">Set Queue to ready</button>
</body>
</html>
答案 0 :(得分:1)
不,这可以解决延迟对象的原始意图。只要Deferred
被解析或拒绝,就会调用先前指定的回调,并且延迟将不可撤销从其初始“挂起”状态更改为“已解决”或“已拒绝”。您将其设置回初始状态会有什么期望?如果要将新处理程序添加到可能已解决或可能尚未解析的延迟对象,则这不是问题。将立即调用该处理程序:
$.Deferred().resolve().then(function() { alert('This works!'); });