2017-01-08 2 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 правильно загружено, возможно, загружено 20 подпапок. Затем он загружает около 3 подпапок и пытается загрузить 4-й, а затем просто умирает. Нет ошибки или журнала или чего-то еще.

Я не хочу исправлять это, устанавливая случайные таймауты, я хочу понять, почему программа выходит так.

Полный код here.

Благодаря

+0

делает .catch (() => Rx.Observable.empty()) вызывается при возникновении ошибки? –

ответ

0

ОК, я понял, что это и (не удивительно), что это я получаю это неправильно.

Если возникла ошибка, она попадает в оператор catch, но, как работает остальная часть кода, следующий путь не передается этой функции до тех пор, пока не будет завершена текущая. При возврате Rx.Observable.empty() код, который передает следующий путь, не знает, что это завершено.

Смежные вопросы