Sto ancora cercando di riprendermi usando gli oggetti Deferred di JQuery, e sto grattando la testa per un problema particolare. Nel codice seguente, inizialmente ho provato a concatenare deferred.then()
ma non ha mai funzionato. Tutte e tre le funzioni vengono eseguite contemporaneamente. Solo dopo che il mio collega di lavoro mi ha indicato la funzione , le cose sono andate a posto. La domanda è, perché funziona pipe()
ma non then()
?
var otherDefer = function(msg){return function(){return testDefer(msg)}};
var there = otherDefer("there,");
var guy = otherDefer("guy.");
function testDefer(msg) {
var deferred = $.Deferred();
pretendAjaxCall(function() {
$('<li>'+msg+'</li>').appendTo('#msgOut');
deferred.resolve();
});
return deferred.promise();
}
function pretendAjaxCall(callback) {
setTimeout(callback,1500);
}
$.when(testDefer("Hi")).pipe(there).then(guy);
Ho anche provato return deferred
anziché return deferred.promise()
utilizzando when().then().then()
.
jsFiddle per il codice di cui sopra: http://jsfiddle.net/eterpstra/yGu2d/
Il violino funziona bene per me utilizzando "then(). Then()" (Chrome). – devundef
nel modo in cui lo capisco, '.then' restituisce l'oggetto posticipato originale, consentendo altre chiamate, quindi, fallite, ecc. '.pipe' filtra il risultato e può restituire un nuovo posticipo/promessa e ogni successivo thens, dones, fail nella catena agirà su quell'oggetto piuttosto che sull'originale. – MrOBrian
questa risposta sopra è per Jquery 1.8 e sotto, leggi sotto le risposte –