Cel: skasowanie drzewa katalogów
Kod:
function removeFilesystemElement(path, isDir)
{
if (isDir)
{
var loopEnd = $.Deferred();
// pobieramy liste podkatalogow/plikow
$.get(ajaxJsonFileListUrl, { parentDir: path }, function(result) {
var loopSync = $.Deferred();
$.each(result.content.files, function(index, item)
{
if (item.basename != '.' && item.basename != '..')
{ // kasujemy rekursywnie podkatalog/plik
loopSync = loopSync.then( removeFilesystemElement( path + '/' + item.basename, item.type == 'dir') );
}
});
// gdy wszystko skasowane, to skasujmy katalog nadrzedny
loopSync = loopSync.then(
$.get(ajaxJsonDeleteUrl, { path: path }, function(result) {
console.debug('delete empyty dir: ' + path);
// odczekajmy chwile (w zasadzie to jest po to, zeby latwiej bylo debugowac) i wtedy wyslijmy informacje, ze zadanie wykonane(resolve)
setTimeout(function() { console.debug('resolve'); loopEnd.resolve(); }, 3000);
})
);
});
return loopEnd;
} else { // jesli to plik to po prostu skasujmy zwracajac get jako obiekt deferred
return $.get(ajaxJsonDeleteUrl, { path: path }, function(result) {
console.debug('delete file: ' + path);
});
}
}
Oczekiwania:
- skasowane drzewo katalogów
- w konsoli "delete empyty dir" powinno się pojawiać naprzemiennie z "resolve".
Wyniki:
Katalogi są kasowane w odwotnej kolejności niż oczekuję czyli operacja kończy się niepowodzeniem. Dodatkowo najpierw leci seria delete empyty dir, a później seria "resolve".
Co robić, jak żyć? Proszę o pomoc:)
edit: jquery > 1.8
Ten post edytował yevaud 24.07.2013, 17:30:21