我有一个组件,用户可以将文件或文件夹拖放到其上,我的代码正在使用该信息执行某些操作。
现在我得到了一个递归方法,它遍历一个文件夹中的文件和其他文件夹,其中也可能有其他包含文件的文件夹等等(我想你明白了)。最后我想拥有用户删除的所有文件。
目前我得到了这个方法:
private traverseDirectory(entry: FileSystemDirectoryEntry): Promise<FileSystemEntry[]> {
const reader = entry.createReader();
return new Promise<FileSystemEntry[]>(resolveDirectory => {
const iterationAttempts: Promise<FileSystemEntry>[] = [];
const errorHandler = () => {
logger.error('Error occurred while traversing directory.');
};
const readEntries = () => {
reader.readEntries((batchEntries: FileSystemEntry[]) => {
if (!batchEntries.length) {
resolveDirectory(Promise.all(iterationAttempts));
} else {
batchEntries.forEach((batchEntry: FileSystemEntry) => {
if (batchEntry.isDirectory) {
iterationAttempts.push(
this.traverseDirectory(batchEntry as FileSystemDirectoryEntry) as any,
);
} else {
iterationAttempts.push(Promise.resolve(batchEntry));
}
});
readEntries();
}
}, errorHandler);
};
readEntries();
});
}
现在我想去掉 isDirectory() 条件之后的行中的“as any”部分。
我尝试了几个小时想出一些东西,但未能完成,希望得到一些帮助。
非常欢迎任何有关如何使代码更具可读性或更简洁的建议,因为我对 Angular 相当陌生,并且希望提高我的知识。
谢谢你:)
请注意,您的函数正在返回
Promise<FileSystemEntry[]>
,而您尝试添加此承诺的列表具有不同的类型签名 Promise<FileSystemEntry>[]
,因为类型不同,您必须将其强制转换为 any。调整列表类型。