try-catch-finally块是否在node.js中同步?

时间:2013-07-10 13:44:22

标签: node.js asynchronous try-catch child-process

我在节点程序中的子进程中运行了一些代码,如下所示:

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");

此代码从另一个节点程序调用,需要等待此文件中的所有操作完成。不幸的是,在执行finally块下的任何代码之前,子进程正在退出代码0。

这让我相信即使try-catch-finally也是异步的。这是对的吗?

2 个答案:

答案 0 :(得分:17)

你的问题令人困惑。

整个Javascript 语言是完全同步的;所有语言结构(包括catchfinally块)将在运行下一行代码之前同步执行。

但是,他们不知道可能已经开始的任何异步操作,并且不会等待它们完成。

答案 1 :(得分:1)

有一些方法可以解决这个问题:

1)https://github.com/CrabDude/trycatch

另见 http://nodejs.org/api/domain.html