【问题标题】:Is the try-catch-finally block synchronous in node.js?node.js 中的 try-catch-finally 块是否同步?
【发布时间】:2013-07-08 11:28:49
【问题描述】:

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

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

【问题讨论】:

  • 这真的没有意义。
  • 也许我应该提出一个新问题,我刚刚在别处添加了一些日志记录语句,看来子进程正在退出,甚至没有运行这些语句。
  • @MattBall 请参考这个问题:stackoverflow.com/questions/17572834/…

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


【解决方案1】:

您的问题措辞令人困惑。

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

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

【讨论】:

【解决方案2】:

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

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

另请参阅 http://nodejs.org/api/domain.html

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 2011-06-01
    • 1970-01-01
    • 2012-11-12
    • 2013-12-16
    • 1970-01-01
    • 2011-08-31
    • 2013-05-18
    • 2012-02-07
    相关资源
    最近更新 更多