2016-09-17 2 views
0

У меня есть несколько операторов, содержащих fs.createReadStream(). Я знаю, что мы можем обрабатывать ошибки, прослушивая событие on('error',cb), но код будет беспорядочным, если я начал слушать событие error в каждом потоке. Я хочу, чтобы быть чистым это:Несколько fs.createReadStream в блоке catch try

try{ 
    var file1 = fs.createReadStream(path1), 
     file2 = fs.createReadStream(path2), 
     file3 = fs.createReadSTream(path3), 
     .... 
} 
catch(e){ 
    console.log(e); 
} 

Но это не работает, как это. В любом случае я могу использовать вышеприведенную структуру кода для обработки ошибки вместо прослушивания события error в каждом потоке?

Спасибо в ожидании.

+1

Почему бы не обернуть 'fs.createReadStream()' функцией, которая берет путь и прикрепляет обработчик 'error'? Это должно дать разумно чистый код. – robertklep

ответ

2

Короткий ответ нет.

Предполагая, что вы можете закрепить логику обработки ошибок (которые вы бы в случае примерки поймать в любом случае), а затем просто создать одну функцию и использовать его в качестве error обработчика для каждого потока:

var file1 = fs.createReadStream(path1).on('error', onError), 
    file2 = fs.createReadStream(path2).on('error', onError), 
    file3 = fs.createReadSTream(path3).on('error', onError); 

function onError(err) { 
    // `this` === stream that encountered the error 
    console.log(err); 
} 
1

В короткий, вы не можете использовать try/catch для захвата асинхронного события error. Читайте подробности о Node.js Errors.

В этом случае событие errorfs.createReadStream произойдет после выполнения try/catch.

Рассмотрите возможность использования синхронных методов, например fs.readFileSync, если вы действительно хотите try/catch.

try{ 
    var file1 = fs.readFileSync(path1), 
     file2 = fs.readFileSync(path2), 
     file3 = fs.readFileSync(path3), 
     .... 
} 
catch(e){ 
    console.log(e); 
} 
Смежные вопросы