Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js-已写入空文件,但为什么?_Javascript_File_Node.js_Javascript Events_Nodes - Fatal编程技术网

Javascript Node.js-已写入空文件,但为什么?

Javascript Node.js-已写入空文件,但为什么?,javascript,file,node.js,javascript-events,nodes,Javascript,File,Node.js,Javascript Events,Nodes,TL;DR为什么第一个文件被写入,而其余的文件是空的 我在Node.js中有一个for循环,它循环文件字符串的数组列表。每个字符串表示其各自目录中的不同文件。数组包含创建三个独立文件所需的三个值。创建并写入第一个文件后,将创建第二个和第三个文件,但保持为空。下面是代码的简写版本。非常感谢您的帮助 for(i in file_tree) { fp = fs.createWriteStream(file_tree[i]); for(i in data) { fp.write(da

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; });
    }
}

数据
未正确初始化。以前的代码是:

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; });
    }
} 
file_tree=[pn+'/theme/file1',pn+'/theme/file2',pn+'/theme/file3'];
for(文件树中的i){
文件名=文件树[i];
fp=fs.createWriteStream(文件名);
数据=[];
开关(文件名){
案例pn+“/theme/file1”:
数据推送(“内容1”);
打破

case pn+“theme/file2”://您可能指的是
if(error),而不是
if(error)
。您还可以使用
i
两次,但这不应该有任何副作用。通过这些更改,我仍然无法再现效果。通过,两个文件都被写入并且完全相同。您能提供一个示例吗?您的系统上是否出现了问题?我解决了问题。我在的长格式版本中缺少一个尾随斜杠代码。很抱歉浪费您的时间,感谢您表现出兴趣。@phihag-很好的回答。我写了错误的代码试图给出一个示例。非常感谢。您介意自己写一个答案并详细说明您所做的更改吗?这样,其他有相同或类似问题的人也可以从这个问题中受益。谢谢!文件树=[pn+'/theme/file1',pn+'/theme/file2',pn+'/theme/file3',];for(文件树中的i){file_name=file_tree[i];fp=fs.createWriteStream(文件名);data=[];开关(文件名){case pn+“/theme/file1”:--snip--break;////错误从这里开始:注意没有“/”前缀//case pn+“theme/file2”:--snip--break;默认值:show(help);}for(i in data){fp.write(data[i]+'\n',function(err){if(err)throw err;}}