【发布时间】:2012-04-04 21:30:12
【问题描述】:
TL;DR为什么第一个文件被写入,而剩下的文件是空的?
我在 Node.js 中有一个循环文件字符串数组列表的 for 循环。每个字符串代表其各自目录中的不同文件。该数组包含创建三个单独文件所需的三个值。创建并写入第一个文件后,将创建第二个和第三个文件,但仍为空。以下是代码的简写版本。非常感谢任何帮助。
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
====== 解决方案=====
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; });
}
}
【问题讨论】:
-
您的意思可能不是
if(error),而是if(err)。您还使用了两次i,但这不应该有任何副作用。通过这些更改,我仍然无法重现效果。使用my demo program,两个文件都被写入并且是相同的。你能提供一个complete 的例子吗?您的系统上是否出现my demo program 的问题? -
我发现了问题所在。我在代码的长格式版本中缺少一个斜杠。很抱歉浪费您的时间,感谢您的关注。
-
@phihag - 很好。我写了错误的代码试图举个例子。非常感谢。
-
您介意自己写一个答案并详细说明您所做的更改吗?这样,任何有相同或类似问题的人也可以从这个问题中受益。谢谢!
-
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);数据 = []; switch(file_name) { case pn+ "/theme/file1": --- snip -- break; // // 错误从这里开始:注意没有'/'前缀 // case pn+ "theme/file2": --snip-- break;默认值:显示(帮助); } for(i in data) { fp.write(data[i]+'\n', function(err) { if (err) throw err; }); } }
标签: javascript node.js file dom-events nodes