11

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

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是异步的。那是对的吗?

4

2 回答 2

18

你的问题措辞令人困惑。

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

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

于 2013-07-10T13:47:53.043 回答
1

有一些方法可以克服这个问题:

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

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

于 2014-08-13T15:15:51.553 回答