Node.js应用程序在等待readdir回调时退出

时间:2017-01-08 17:49:55

标签: node.js rxjs

我正在编写一个小库,它将扩展给定路径,并列出其下的所有文件夹和目录。

读取文件夹内容的功能如下所示:

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

由于

1 个答案:

答案 0 :(得分:0)

好的,我弄清楚这是什么,并且(不出意外)它让我弄错了。

如果发生错误,它会被catch语句捕获,但其余代码工作的方式下一个路径不会传递给此函数,直到当前完成。 当返回Rx.Observable.empty()时,传递下一个路径的代码并不知道这个路径是完整的。