1

Deferred を解決済みから初期状態に戻すにはどうすればよいですか?

新しいキューを作成しようとしましたが、その場合、最初に解決しないと、これまでに追加したすべてのイベントが失われます。

Deferred の状態モデルはありますか (Processing --> Resolved... おそらく中間の何か、Resolved から Processing に移行する方法....)

これは私がこれまでに持っているものです:

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

いいえ、これは遅延オブジェクトの本来の意図と矛盾します。が解決または拒否されるとすぐに、以前に指定されたコールバックが呼び出さDeferredれ、Deferred が最初の「保留中」状態から「解決済み」または「拒否済み」に変更されます。初期状態に戻すとどうなりますか? まだ解決されていない可能性がある遅延オブジェクトに新しいハンドラーを追加する場合、これは問題ではありません。ハンドラーはすぐに呼び出されます。

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