2016-04-08 18 views
0

jQuery: deferred.then()jQuery的遞延官方例子:那麼()

我想 'defer.resolve(5)' 後 'filtered.done()' 是正確的,但爲什麼都具有相同的結果。

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

不要緊,當你做了'resolve',這是承諾的整點 - 每當決心發生,已註冊的處理程序執行。如果解決方案已經發生在過去,處理程序立即執行(可能排隊)。 –

+0

這些函數是異步的,所以在解決第一個推遲 – Lulylulu

+0

@ Chips_100時無關緊要。你是對的。感謝您指出了這一點。 –

回答

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>