2017-01-08 6 views
0

私は与えられたパスを展開し、その下にあるすべてのフォルダとディレクトリのリストを与える小さなライブラリを作成しています。Node.jsアプリケーションは、readdirコールバックを待つ間に終了します

フォルダの内容は、次のようになります読み込み機能:このコールバックを待っている間

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

します。エラーが発生したときに.catch(()=> Rx.Observable.empty())が呼び出されますか? –

答えて

0

OK

おかげで、私はこれがあると、(当然ながら)それは私がそれは間違って取得何を考え出しました。

エラーが発生した場合、catchステートメントによってキャッチされますが、残りのコードが次のパスで動作する方法は、現在のパスが完了するまでこの関数に渡されません。 Rx.Observable.empty()が返されるので、次のパスを渡すコードは、これが完了したことを知らない。

関連する問題