/ / Compreendendo as seqüências $ .Deferred () e $ .fn.pipe () - jquery, sequence, pipe, adiado

Noções básicas sobre sequências $ .Deferred () e $ .fn.pipe () - jquery, sequência, canal, adiada

Estou preso neste código:

reload: function() {
var self = this;
$.when(self.unload()).then(function() {
self.load();
});
},
load: function() {
var self = this;
$.ajax({
url: self.options.url,
success: function(data) {
$.Deferred(
function(dfr) {
$.each(data, function() {
var div = $("<div></div>")
.addClass("nw-item")
.html("newsitem.ejs", this)
.hide()
.appendTo(self.element);
dfr = dfr.pipe(function() {
return div.slideDown(self.options.speed);
});
});
}).resolve();
}
})
},
unload: function() {
var items = this.element.children(".nw-item").reverse(),
self = this,
udfd = $.Deferred(
function(dfr) {
$.each(items, function() {
var div = $(this);
dfr = dfr.pipe(function() {
return div.slideUp(self.options.speed);
});
});
}).resolve();
return udfd;
}

em "reload", preciso iniciar a sequência "load" após a sequência "unload" ser concluída, mas começa logo após a primeira iteração do elemento da sequência "unload" ficar oculta. Ajuda-me, por favor, estou preso (

Respostas:

1 para resposta № 1

Não testado, mas tente o seguinte:

unload: function() {
var items = this.element.children(".nw-item").reverse();
var self = this;
var udfd = $.Deferred();
var chain;
$.each(items, function() {
chain = udfd.pipe(function() {
return $.Deferred(function(deferred) {
div.slideUp(self.options.speed, function() {
// callback function gets executed when slideUp is done
deferred.resolve();
});
}).promise();
});
});
chain.done(function() {
udfd.resolve();
});
return udfd.promise();
}

Desde o seu jQuery.A função slideUp é assíncrona, mas não retorna um objeto adiado, como por exemplo jQuery.ajax, você deve retornar manualmente um adiado / promessa. Quando sua cadeia de funções canalizadas é concluída, ela resolve os principais adiados. Não se esqueça de retornar uma promessa para os principais adiados.

Como eu disse, não há garantia, mas você pode tentar!