2014-01-14 3 views
2

html5 파일 시스템을 탐색하고 모든 파일이 통과되면 알림을 받고 싶습니다. HTML 파일 시스템 라이브러리에 대한 래퍼입니다 filer를 사용각도 JS의 재귀 적 약속

이 사용 재귀 파일 시스템 워커 메신저를 시작하기 위해 :

filerService.ls(filerService.fs.root, function(entries){ 
    for(var i = 0; i < entries.length; i ++) { 
    traverseFileTree(entries[i]); 
    } 
}); 

재귀 기능 :

function traverseFileTree(item) { 

    if(item.isFile) { 
     console.log("item is file: " + item.name); 
     //do something with file here 

    } else if (item.isDirectory) { 
     console.log("item is directory: " + item.name); 

     filerService.ls(item, function(entries) { 

      for(var i = 0; i < entries.length; i ++) { 
       traverseFileTree(entries[i]); 
      } 
     }); 
    } 
}; 

이제 다음과 같이하고 싶습니다.

var promise = walkFileTree() //this method should start the recursive methods and return a promise 

promise.then(function(){ 
    //notify user that the filewalker has completed 
}) 

누구에게 어떻게 달성 할 수있는 몇 가지 지침이 있습니까?

답변

3

약속의 배열 (각 하위 디렉토리 당 하나)과 $q.all()을 사용하여 수행 할 수 있습니다. 이 솔루션의 검증되지 않은 개요는 다음과 같습니다 walkFileTree() 루트를 반복 반면 walkFileTree(item)는 항목을 반복 할 것

function walkFileTree(item) { 
    var d = $q.defer(), promises = [d.promise]; // we need at least one promise because we do not know beforehand the number of included directories 
    if(typeof(item) === "undefined") item = filerService.fs.root; 
    filerService.ls(item, function(entries){ 
     for(var i = 0; i < entries.length; i ++) { 
      promises.push(traverseFileTree(entries[i])); 
     } 
     d.resolve(); 
    }); 
    return $q.all(promises); 
} 

function traverseFileTree(item) { 
    var d = $q.defer(); 
    if(item.isFile) { 
     console.log("item is file: " + item.name); 
     //do something with file here 
     d.resolve(); 
     return d.promise; 
    } 
    else if (item.isDirectory) { 
     console.log("item is directory: " + item.name); 

     return walkFileTree(item); 
    } 
}; 

참고.

내가 말했듯이 이것은 테스트되지 않았으므로 아마도 조정할 필요가 있지만 솔루션 개요를 보여줍니다 (나는 생각합니다).

+0

예 완벽 함 덕분에 사물을 원근감있게 볼 수 있습니다. – BuildingJarl

+0

불행히도 의도 한대로 작동하지 않습니다. 모든 파일이 통과되면 약속이 해결 될 것 같습니다. – BuildingJarl

+0

당신이 바이올린/plunk를 제공 할 수 있다면 우리는 세부 사항을 해결할 수 있습니다 ... –