我正在编写一个小库,它将扩展给定路径,并列出其下的所有文件夹和目录。
读取文件夹内容的功能如下所示:
function loadFolderContents(folder: string): Rx.Observable<string[]>{
console.log(`loading path content: ${folder}`)
const readDirObservable = Rx.Observable.fromNodeCallback<string[]>( fs.readdir )
return readDirObservable(folder)
.catch(() => Rx.Observable.empty())
.do(folderContents => console.log(`loading path content: ${folder} COMPLETE - ${folderContents}`))
.map(folderContents => folderContents.map( filepath => path.join(folder, filepath)));
}
某种程度上,我的应用程序在等待此回调时退出...
作为一个例子,我试图扫描我的C:驱动器。正确加载C驱动器的内容,可能加载了20个子文件夹。然后它加载大约3个子文件夹并尝试加载第4个然后就死了。没有错误或日志或任何东西。
我不想通过设置随机超时来解决这个问题,我想了解程序为什么会这样退出。
完整代码为here。
由于
答案 0 :(得分:0)
好的,我弄清楚这是什么,并且(不出意外)它让我弄错了。
如果发生错误,它会被catch语句捕获,但其余代码工作的方式下一个路径不会传递给此函数,直到当前完成。 当返回Rx.Observable.empty()时,传递下一个路径的代码并不知道这个路径是完整的。