1

如何将延迟从已解决设置回初始状态?

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

是否有延迟的状态模型(处理->已解决......也许介于两者之间,如何从已解决进入处理......)

这是我到目前为止所拥有的:

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

1 回答 1

1

不,这与延迟对象的初衷相矛盾。只要 aDeferred被解决或拒绝,就会调用先前指定的回调,并且 Deferred不可撤销地从其初始“挂起”状态更改为“已解决”或“已拒绝”。将其设置回初始状态会发生什么?如果您想将新的处理程序添加到可能已经或可能尚未解决的延迟对象,这不是问题。处理程序将立即被调用:

$.Deferred().resolve().then(function() { alert('This works!'); });
于 2013-02-07T12:50:41.737 回答