Tengo un problema con una función JS asíncrona. Bueno, tengo una función que inserta elementos uno por uno. Esto funciona. Pero me gustaría continuar después de que se hayan realizado todas las .load() .
La forma en que implementé la parte Deferred() es obviamente incorrecta, pero no tengo ni idea de cómo lograrlo.
Nota: he simplificado el código para una mayor claridad.
var d = new jQuery.Deferred(); var i = index; function loadView() { if(i > -1 && i < array.length) { if(!jQuery.contains(document.documentElement, $(selector)[0])) { /* do stuff here */ panel.load(myPHPfile, function() { $dom.append($(selector)); i++; if(i < array.length) { loadView(); d.resolve(); } }); } } } loadView(); jQuery.when(d).then(function() { /* when all elements are insert, do something */ });Estoy agradecido por cualquier ayuda!
Si i < array.length después de incrementar, eso significa que no ha terminado, por lo que no desea resolver su diferido allí. En cambio:
if(i < array.length) { loadView(); } else { // *** d.resolve(); } Por separado, no necesita usar jQuery.when . Sólo:
d.then(function() { /* when all elements are insert, do something */ });