Google 크롬의 파일 시스템 API를 사용하여 파일을 검색하기 위해 디렉토리를 반복 실행하려고합니다.호출되지 않는 함수 알아보기
온라인 012 files.push(file);
에서 files
배열을 채우려 고 시도하는 것이 불려지지는 않습니다. 그러나 이것을 console.log(file);
으로 바꾸면 갑자기 작동하지만 그 기능 만 있습니다.
아무도 무슨 일이 일어나고 있고 내가 뭘 잘못하고 있는지 설명 할 수 있습니까? 보려면 다음 JSFiddle 상자에 어떤 디렉토리를 삭제 :
http://jsfiddle.net/tekky/ZXU8v/8/
코드 :이console.log(file)
후 각 파일 에 대한 반환 있도록
var dndbox = $(".dndbox")[0];
dndbox.addEventListener("dragenter", function(e) {
e.stopPropagation();
e.preventDefault();
},false);
dndbox.addEventListener("dragover", function(e) {
e.stopPropagation();
e.preventDefault();
},false);
dndbox.addEventListener("drop", function(e) {
e.stopPropagation();
e.preventDefault();
var itemList = e.dataTransfer.items;
var files = [];
var traverse = function(entry)
{
if (entry.isFile) {
entry.file(function(file){
files.push(file);
});
} else if (entry.isDirectory){
var dR = entry.createReader();
dR.readEntries(function(entries) {
for(var i = 0; i < entries.length; i++)
{
traverse(entries[i]);
}
});
}
}
for(var i = 0; i < itemList.length; i++) {
var e = itemList[i].webkitGetAsEntry();
traverse(e);
}
console.log(files); //Empty?
},false);
약속 보이는 ... 도니는 다르게 약속을 :) 할 수있는 더 좋은 방법이 될 수 있습니다. 그러나 단 한 번만 resolve를 호출 할 수 있습니다. 함수가 재귀 적이기 때문에 어떻게이 문제를 해결할 수 있습니까? 귀하의 답변과 함께 사례를 제공하는 데주의하십시오. – Tek
내 대답이 업데이트되었으며, 나 자신도 몇 가지 사실을 알게되었습니다! :) – user1234
정말 고마워요! 너무 나쁜 표준 JS에는'.when()'이 없습니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise 이것을 사용하여 구현하고 싶었지만 가능하지 않니? – Tek