在使用HTML5 FileSytem API的Chrome扩展程序中。
我正在检索文件夹中的记录列表。
var entries = [];
var metadata = [];
listFiles(folder);
function listFiles(fs) {
var dirReader = fs.createReader();
entries = [];
// Call the reader.readEntries() until no more results are returned.
var readEntries = function () {
dirReader.readEntries(function (results) {
if (!results.length) {
addMeta(entries);
} else {
console.log(results);
entries = entries.concat(toArray(results));
readEntries();
}
});
};
readEntries(); // Start reading dirs.
}
FileEntry对象不包含元数据,我需要上次修改日期。我能够检索元数据对象
function addMeta(entries) {
for (var i = 0; i < entries.length; i++) {
entries[i].getMetadata(function (metadata) {
console.log(entries);
console.log(metadata);
});
}
}
问题是我在回调中获取元数据。 如何加入这两个对象以确保正确匹配? 我正在寻找的简化结果是:
[
["fileName1", "modifyDate1"],
["fileName2", "modifyDate2"],
]
答案 0 :(得分:2)
getMetadata
,根据this question的说明,只需使用entry.file.lastModifiedDate
,但可能file()
是另一个回调。 要“加入两个对象以确保正确匹配”,由于Closures,您可以使用以下代码来获得正确的结果。 (假设您提到的数据结构为[[entry, metadata]]
)
var ans = [];
function addMeta(entries) {
for (var i = 0; i < entries.length; i++) {
(function(entry) {
entry.getMetadata(function (metadata) {
ans.push([entry, metadata]);
});
}(entries[i]);
}
}
setInterval
或使用变量来计算剩余的回调数。答案 1 :(得分:0)
我建议看看基于Promise的bro-fs HTML文件系统API的实现 要阅读包含元数据的所有条目,您可以执行以下操作:
fs.readdir('dir')
.then(entries => {
const tasks = entries.map(entry => fs.stat(entry.fullPath))
return Promise.all(tasks);
})
.then(results => console.log(results))