2016-04-08 10 views
0

jQuery: deferred.then()jQuery Latente Amt Beispiel: dann()

Ich dachte, 'defer.resolve (5)' nach 'filtered.done()' ist richtig, aber warum haben beide das gleiche Ergebnis.

var filterResolve = function() { 
    var defer = $.Deferred(), 
    filtered = defer.then(function(value) { 
     return value * 2; 
    }); 

    defer.resolve(5); 

    filtered.done(function(value) { 
    $("p").html("Value is (2*5 =) 10: " + value); 
    }); 
}; 

var filterResolve = function() { 
    var defer = $.Deferred(), 
    filtered = defer.then(function(value) { 
     return value * 2; 
    }); 

    filtered.done(function(value) { 
    $("p").html("Value is (2*5 =) 10: " + value); 
    }); 

    defer.resolve(5); 
}; 
+0

Es spielt keine Rolle, wenn Sie die 'resolve' tun, das ist der ganze Sinn der Versprechen - wann immer die Entschlossenheit geschieht, werden die registrierten Handler ausgeführt . Wenn die Entschlossenheit bereits in der Vergangenheit aufgetreten ist, wird der Handler sofort ausgeführt (möglicherweise in der Warteschlange). –

+0

Die Funktionen sind async, so dass es keine Rolle spielt, wenn Sie die erste Verschiebung – Lulylulu

+0

@ Chips_100 auflösen. Du hast recht. Danke, dass du darauf hingewiesen hast. –

Antwort

0

var defer = $.Deferred(), 
 
    filtered = defer.then(function(value) { 
 
     return value * 2; 
 
    }); 
 

 
defer.resolve(5); 
 
    
 
$("button").on("click", function(){ 
 
    filtered.done(function(value) { 
 
    $("p").html("Value is (2*5 =) 10: " + value); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button>Filter Resolve</button> 
 
<p></p>