【发布时间】:2021-02-03 13:47:30
【问题描述】:
我很失望没有找到解决方案,用 promise 递归和异步搜索 smb 共享中的文件。我的代码可能是正确的方式(我希望),但是内部的 readFiles 调用,什么都不返回。有什么想法可以解决我的困难吗?
readFiles(tree, path).then(files => {
// all files in dirs
});
const readFiles = async (tree: Tree, path: string): Promise<string[]> => {
const promises:Promise<string>[] = [];
const entries = await tree.readDirectory(path);
entries.forEach(entry => {
promises.push(function(entry) {
return new Promise<any>((resolve, reject) => {
const files:string[] = [];
if (entry.type == "Directory") {
readFiles(tree, path + "/" + entry.filename.substring(2)).then(items =>
items.forEach(item => files.push(item)));
} else {
if (entry.filename.toLowerCase().endsWith(".cmz"))
files.push(path + '/' + entry.filename.substring(2));
}
return resolve(files);
});
}(entry));
});
return Promise.all(promises);
}
【问题讨论】:
-
在递归调用
readFiles之前需要return否则,顶级调用不会产生任何内容。 -
VLAZ,你能更准确一点吗?我添加了一个返回但相同的声音
-
您的
resolve(files)在 readFiles 承诺在then回调中返回之前返回。为什么不尝试使用 async/await 来解决这个问题,而不是创建新的 Promise。您可以等待致电readFiles。 -
附带问题:
substring(2)从文件名中删除了什么?
标签: javascript typescript asynchronous promise