Jquery 延迟对象:解析后重新启动

Jquery 延迟对象:解析后重新启动,jquery,deferred,Jquery,Deferred,如何将“已从已解析的差异”设置回初始状态 我尝试创建一个新队列,但在这种情况下,如果我不首先解决它,我将丢失迄今为止添加的所有事件 是否存在延迟的状态模型(处理-->已解决…可能介于两者之间,如何从已解决转换为处理…) 这就是我到目前为止所做的: <!doctype html> <html> <head> <meta charset="utf-8"> <title>Demo</title> <s

如何将“已从已解析的差异”设置回初始状态

我尝试创建一个新队列,但在这种情况下,如果我不首先解决它,我将丢失迄今为止添加的所有事件

是否存在延迟的状态模型(处理-->已解决…可能介于两者之间,如何从已解决转换为处理…)

这就是我到目前为止所做的:

<!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>

演示
var deferredReady=jQuery.Deferred();
$(函数(){
$('#Queue1,#Queue2')。单击(函数(){
var text=$(this.text();
deferredReady.done(函数(){
$(“”{
文本:文本
}).附于(“主体”);
});
});
$('#QueueReady')。单击(函数(){
deferredReady.resolve();
});
$('#NewQueue')。单击(函数(){
//删除旧队列(首先解析)
deferredReady=jQuery.Deferred();
});
});
将Comamnd添加到就绪队列
将otherComamnd添加到就绪队列
将队列设置为就绪
将队列设置为就绪

不,这体现了延迟对象的原始意图。一旦
延迟的
被解析或拒绝,就会调用以前指定的回调,并且延迟的状态将不可撤销地从初始的“挂起”状态更改为“已解析”或“已拒绝”。如果将其设置回初始状态,您会有什么期望?如果您想向延迟对象添加一个新的处理程序,而延迟对象可能已经解决,也可能尚未解决,这不是问题。将立即调用处理程序:

$.Deferred().resolve().then(function() { alert('This works!'); });

不,这体现了延迟对象的原始意图。一旦
延迟的
被解析或拒绝,就会调用以前指定的回调,并且延迟的状态将不可撤销地从初始的“挂起”状态更改为“已解析”或“已拒绝”。如果将其设置回初始状态,您会有什么期望?如果您想向延迟对象添加一个新的处理程序,而延迟对象可能已经解决,也可能尚未解决,这不是问题。将立即调用处理程序:

$.Deferred().resolve().then(function() { alert('This works!'); });

同意,但句子“一旦延迟被解决,相关的处理程序被调用,延迟对象被“完成”,它没有进一步的目的”需要一些工作。“延迟解决或拒绝后,将调用以前指定的回调,延迟将不可撤销地从最初的“待定”状态更改为“已解决”或“已拒绝”。谢谢您的建议,我更改了措辞。同意,但“延迟解决后,关联的处理程序被调用,延迟对象被“完成”,它没有进一步的用途“需要一些工作”。如果“一旦延迟对象被解析或拒绝,则会调用以前指定的回调,并且延迟对象将不可撤销地从其初始“挂起”状态更改为“已解析”或“已拒绝”。谢谢您的建议,我改变了措辞。