Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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 即使变量不是空的,也没有输出文件_Javascript_Node.js - Fatal编程技术网

Javascript 即使变量不是空的,也没有输出文件

Javascript 即使变量不是空的,也没有输出文件,javascript,node.js,Javascript,Node.js,即使我可以在控制台中清楚地看到我的输出。我无法将它们写入文件。有1个输出文件及其undefined-03-02-2017.txt,其中包含一行“15:33 undefined” for (i = 0; i < channelcount; i++) { messages[i] -= messagesOld[i]; console.log(channels[i] + ' ' + messages[i]); messages[i] = messagesOld[i];

即使我可以在控制台中清楚地看到我的输出。我无法将它们写入文件。有1个输出文件及其undefined-03-02-2017.txt,其中包含一行“15:33 undefined”

for (i = 0; i < channelcount; i++) {
    messages[i] -= messagesOld[i];
    console.log(channels[i] + ' ' + messages[i]);
    messages[i] = messagesOld[i];

    fs.open('logs/' + channels[i] + '.txt', 'r', function (err, fd) {
        if (err && err.code == 'ENOENT') {
            fs.writeFile('logs/' + channels[i] + '-' + moment().format('MM-DD-YYYY') + '.txt', moment().format('H:mm') + ' ' + messages[i], function (err) { });
        } else {
            fs.appendFile('logs/' + channels[i] + '-' + moment().format('MM-DD-YYYY') + '.txt', moment().format('H:mm') + ' ' + messages[i] + '\n', function () { });
        }
    });
}
for(i=0;i
@Pyro,您不正确地使用了writeFile。请参阅语法 writeFile(文件,数据[,选项],回调)

你必须像这样使用

fs.writeFile('logs/'+channels[i]+'-'+moment().format('MM-DD-YYYY')+moment().format('H:MM')+'.txt',messages[i],function(err){})

fs.open()
是一个异步函数。因此,整个循环将在实际调用第一个回调之前运行。此时i等于channelCOount+1,而channel[channelCount+1]未定义


您可以将回调包装成闭包,如果可以使用ES6,可以使用
let
,或者使用
fs.openSync()

为什么您的频道[i]返回未定义?或者文件undefined-03-02-2017.txt不是由该函数生成的?PS:为了记录,如果文件不存在,appendFIle也会创建一个文件,所以你的if语句是多余的。这是我无法理解的。我可以在控制台中将它们视为输出;s async片刻。臭名昭著的循环你对语法做了什么更改?@Shilly我的意思是他没有正确连接文件路径。我想在文本文件和消息变量中保留H:mm。哦,对不起,我的错。。。。