web-dev-qa-db-ja.com

try-catch-finallyブロックはnode.jsで同期していますか?

次のようなノードプログラムの子プロセスで実行されているコードがあります。

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は非同期です。あれは正しいですか?

11
krb686

あなたの質問は紛らわしい言葉で書かれています。

Javascript全体言語は完全に同期しています。 catchおよびfinallyブロックを含むすべての言語構造は、次のコード行を実行する前に同期的に実行されます。

ただし、開始された可能性のある非同期操作を認識しておらず、終了するのを待ちません。

17
SLaks

これを克服するいくつかの方法があります:

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

参照 http://nodejs.org/api/domain.html

1
Valter