2012-03-20 2 views
2

TL; DR最初のファイルは書き込まれますが、残りのファイルは空白なのはなぜですか?Node.js - 空のファイルが書き込まれましたが、なぜですか?

Node.jsには、ファイル・ストリングの配列リストをループするforループがあります。各文字列はそれぞれのディレクトリにある別のファイルを表します。配列には、3つの独立したファイルを作成するために必要な3つの値が含まれています。最初のファイルが作成されて書き込まれると、2番目と3番目のファイルが作成されますが空のままになります。以下は、コードの簡略版です。どんな助けも大歓迎です。

for(i in file_tree) { 

    fp = fs.createWriteStream(file_tree[i]); 

    for(i in data) { 
    fp.write(data[i]+'\n', function (err) { if(error) throw err;}); 
    } 

} // end for loop - file_tree 

====== SOLUTION =====

file_tree = [ 
    pn+ '/theme/file1', 
    pn+ '/theme/file2', 
    pn+ '/theme/file3', 
]; 

for(i in file_tree) { 

    file_name = file_tree[i]; 
    fp = fs.createWriteStream(file_name); 

    data = []; 
    switch(file_name) { 
     case pn+ "/theme/file1": 
        --- snip -- 
      break; 

     // 
     // ERROR BEGINS HERE : Notice no '/' prefix 
     // 
     case pn+ "theme/file2": 
      --snip-- 
      break; 

     default: show(help); 
    } 

    for(i in data) { 
      fp.write(data[i]+'\n', function(err) { if (err) throw err; }); 
    } 
} 
+0

'if(error)'の代わりに、おそらく 'if(err)'を意味します。 'i'も2回使用しますが、副作用はありません。これらの変更によって、私はまだその効果を再現することができません。 [私のデモプログラム](https://gist.github.com/2134731)では、両方のファイルが作成され、同じになります。 [* complete *](http://sscce.org)のサンプルを提供できますか?あなたのシステムで[私のデモプログラム](https://gist.github.com/2134731)で問題が発生していますか? – phihag

+0

私は問題を理解しました。私はコードの長い形式のバージョンで後続のスラッシュを見逃していました。あなたの時間を無駄にして申し訳ありません、そして興味を示してくれてありがとう。 –

+0

@phihag - 良いキャッチ。私は例を挙げようとしている間違ったコードを書きました。本当にありがとう。 –

答えて

1

dataが正しく初期化されていません。以前のコードはでした:

file_tree = [ pn+ '/theme/file1', pn+ '/theme/file2', pn+ '/theme/file3']; 
for(i in file_tree) { 
    file_name = file_tree[i]; 
    fp = fs.createWriteStream(file_name); 
    data = []; 
    switch(file_name) { 
    case pn+ "/theme/file1": 
     data.push("content-1"); 
     break; 
    case pn+ "theme/file2": // <-- error 
     data.push("content-2"); 
     break; 
    default: show(help); 
    } 
    for(i in data) { 
     fp.write(data[i]+'\n', function(err) { if (err) throw err; }); 
    } 
} 

case文がスラッシュを欠けていたので、それが一致しなかったため、dataは空でした。

関連する問題