Является ли блок try-catch-finally синхронным в node.js?
У меня есть некоторый запуск кода в дочернем процессе в программе node, например:
try{
var data = fs.readFileSync(urlPath, {"encoding":"utf8"});
} catch (err) {
console.log("Error reading url file...");
throw err;
} finally {
console.log("File read!");
var array = data.split("\n");
console.log("Found " + array.length + " urls");
Этот код вызывается из другой программы node, которая должна ждать, пока все операции в этом файле не будут выполнены. К сожалению, дочерний процесс выходит с кодом 0 до того, как выполняется какой-либо код в блоке finally
.
Это заставляет меня думать, что даже try-catch-finally
является асинхронным. Это правильно?
Ответы
Ответ 1
Ваш вопрос путается.
Весь язык Javascript полностью синхронный; все языковые конструкции, включая блоки catch
и finally
, будут выполняться синхронно перед запуском следующей строки кода.
Однако они не знают о каких-либо асинхронных операциях, которые могут начаться, и не будут ждать их завершения.
Ответ 2
Есть несколько способов преодолеть это:
1) https://github.com/CrabDude/trycatch
См. также
http://nodejs.org/api/domain.html