即使变量不为空,也没有输出文件

时间:2017-03-02 13:45:51

标签: 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];

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

2 个答案:

答案 0 :(得分:0)

@Pyro,你错误地使用了writeFile。请参阅语法 writeFile(文件,数据[,选项],回调)

你必须像这样使用

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

答案 1 :(得分:0)

NULL是一个异步函数。所以你的整个循环将在第一个回调被实际调用之前运行。到那时我等于channelCOount + 1并且channel [channelCount + 1]未定义。

您可以将回调包装到闭包中,如果可以使用ES6则使用fs.open(),或使用let