我試圖建立與科爾多瓦一個函數,它給了我一個JSON對象,如下所示:如何獲得所有文件和文件夾結構的JSON對象
{
"file:///storage/emulated/0/Android/data/test/files/data/bla.txt": "bla.txt",
"file:///storage/emulated/0/Android/data/test/files/data/HelloWorld.txt": "HelloWorld.txt",
"file:///storage/emulated/0/Android/data/test/files/data/RSC/picture-1469199158993.jpg": "picture-1469199158993.jpg",
"file:///storage/emulated/0/Android/data/test/files/data/RSC/picture-1469199665434.jpg": "picture-1469199665434.jpg",
"file:///storage/emulated/0/Android/data/test/files/data/API-Test/test/datFile.txt": "datFile.txt",
"file:///storage/emulated/0/Android/data/test/files/data/RSC/thumbnails/picture-1469199158993.jpg": "picture-1469199158993.jpg",
"file:///storage/emulated/0/Android/data/test/files/data/RSC/thumbnails/picture-1469199665434.jpg": "picture-1469199665434.jpg"
}
我的問題是,科爾多瓦功能是異步所以我的函數返回一個空對象。
這裏是我的解決方案迄今:
var dirObj = new Object();
function getFiles(fullPath, callback){
dirObj = new Object();
window.resolveLocalFileSystemURL(fullPath, addFileEntry, function(e){
console.error(e);
});
return JSON.stringify(dirObj);
}
var addFileEntry = function (entry) {
var dirReader = entry.createReader();
dirReader.readEntries(
function (entries) {
var fileStr = "";
for (var i = 0; i < entries.length; i++) {
if (entries[i].isDirectory === true) {
addFileEntry(entries[i]);
} else {
dirObj[entries[i].nativeURL] = entries[i].name;
console.log(entries[i].fullPath);
}
}
},
function (error) {
console.error("readEntries error: " + error.code);
}
);
};
注:無極()是不是一種選擇,因爲功能必須在Chrome 30.0和承諾(工作)是avaible自32.0(src)。
您可以使用回調或承諾填充(例如Bluebird)嗎? – gcampbell
[等待異步任務完成]可能的重複(http://stackoverflow.com/questions/18729761/wait-for-async-task-to-finish) – AxelH
@AxelH以及如何確定遞歸函數是否完成調用回調?遞歸函數調用自己是異步的。 – Durzan