2017-01-08 86 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

does .catch(()=> Rx.Observable.empty())發生錯誤時會調用嗎? –

回答

0

OK,我想通了,這是什麼以及(這並不奇怪),這是我得到它錯了。

如果發生錯誤,它會被catch語句捕獲,但是代碼的其餘部分工作的方式下一個路徑不會傳遞到此函數,直到當前一個完成。 當返回一個Rx.Observable.empty()時,傳遞下一個路徑的代碼不知道這個是完整的。

相關問題