Я использую appendFile в узле js, но содержимое файла является случайным - PullRequest
0 голосов
/ 18 сентября 2018

Это мой код:

var fs = require('fs');
var fs2 = require('fs');
var i;
var slash = '/';
fs.open('target.txt', 'r', function (err, fd) {
    if (err) throw err;
    console.log('file open complete');
});
fs2.open('log2.txt', 'w', function (err, fd) {
    if (err) throw err;
    console.log('file open complete');
})
var array = fs.readFileSync('target.txt').toString().split("\n");

var i = 0;
var slash = ' ';
for (i = 0; i < array.length; ++i) {
    if (i % 2 == 1) {
        var query = array[i];
        if (i != array.length - 1)
            fs2.appendFile('log2.txt', query.substring((query.lastIndexOf(': ') + 2), (query.length - 2)).concat(slash), 'utf-8', function (error) { });
        else if (i == array.length - 1)
            fs2.appendFile('log2.txt', query.substring((query.lastIndexOf(': ') + 2), (query.length - 1)), 'utf-8', function (error) { });
        console.log(query.substring((query.lastIndexOf(': ') + 2), (query.length - 2)));
    }
}

Текстовый файл выглядит так:

---->2018-09-12 1. 23818 [] [thread : main] [priority : DEBUG] [category : javasql.ClientSql] [Class : javasql.ClientSql] [method : insertToDb] [ndc : ]- [log content : com.mysql.cj.jdbc.ClientPreparedStatement: insert into db]

Этот код читает текстовый файл построчно, сохраняет их в массиве и разбор запроса к базе данных четного числа и добавление к log.txt.

Кажется, это сработало хорошо, но log.txt содержимое файла является случайным.

Когда я запускаю код в файле node.js, log.txt имеет значение Insert into values/Create values

но почти запустить код в узле js

Create valuesInsert into values/

Последовательность изменена. Я не трогал target.txt.

Почему возникает эта проблема?

1 Ответ

0 голосов
/ 18 сентября 2018

Это происходит только потому, что appendFile является асинхронной операцией.Таким образом, вам нужно либо полностью переписать свой код, либо заменить appendFile на appendFileSync.

...