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