Is it possible to reset a jQuery deferred object state?

后端 未结 3 1671
终归单人心
终归单人心 2021-01-11 09:39

Is it possible to reset a resolved jQuery object to an \'unresolved\' state and kick off it\'s initialization and callbacks all over again?

The specific thing I\'m d

3条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-01-11 10:07

    An example of a possible solution is:

    $.myDeferredList = [];
    $.createRestorableDeferred = function(a,b) {
        // JUST BY SIMPLE $.when().then();
        $.myDeferredList[a] = {
            deferred: $.Deferred()
            , then: b
            ,restore : function() {
                $.myDeferredList['myReady'].deferred = $.Deferred();
                $.when($.myDeferredList['myReady'].deferred).then($.myDeferredList['myReady'].then);
            }
            ,resolve : function() {
                $.myDeferredList['myReady'].deferred.resolve();
            }
        }
        $.when($.myDeferredList['myReady'].deferred).then($.myDeferredList['myReady'].then);
        window[a] = $.myDeferredList['myReady'];
    }
    
     var counter = 0;
     $.createRestorableDeferred('myReady', function () {
         console.log('>> myReady WHEN called',++counter);
         $.myDeferredList['myReady'].restore();
    
     });
    
    // RESOLVING ways
    
    $.myDeferredList['myReady'].deferred.resolve();
    $.myDeferredList.myReady.deferred.resolve();
    myReady.resolve();
    

    Results in console:

     >> myReady WHEN called 1
    
     >> myReady WHEN called 2
    
     >> myReady WHEN called 3
    

提交回复
热议问题