Javascript 即使变量不是空的,也没有输出文件
即使我可以在控制台中清楚地看到我的输出。我无法将它们写入文件。有1个输出文件及其undefined-03-02-2017.txt,其中包含一行“15:33 undefined”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];
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。哦,对不起,我的错。。。。