Как исправить «неопределенный» массив при чтении файла в массив с помощью readFile - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь загрузить список имен файлов в текстовом файле в массив js.

Я попытался использовать модуль fs, чтобы сделать это, и, хотя я могу успешно распечатать массив внутри функции readFile, я не могу этого сделать, если я возвращаю массив и пытаюсь распечатать его снаружи.

const fs = require("fs");
function parseFileList(fileToRead){

    fs.readFile(fileToRead, 'utf8', (err, data) => {
        if (err) throw err;
        const textByLine = data.split("\n").slice(0,-1);
        return textByLine;
    });
}

const refList = parseFileList(argv.ref);
console.log(refList);

Имена файлов в файле должны выводиться в виде массива строк. Но сейчас он просто печатает undefined. Я думаю, что это как-то связано с тем, что readFile является асинхронным, но я не уверен, как его решить.

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Было бы намного проще использовать readFileSync, потому что Sync в названии означает, что это синхронная операция:

function parseFileList(fileToRead) [
  const textByLine = fs.readFileSync(fileToRead, "utf8").split("\n").slice(0, -1);
  return textByLine;
}
0 голосов
/ 04 июля 2019

Это потому, что вы получаете ответ в обратном вызове. если вы хотите, чтобы эта функция работала, вы должны преобразовать ее в Обещание:

function parseFileList(fileToRead){
    return new Promise((resolve, reject) => {
     fs.readFile(fileToRead, 'utf8', (err, data) => {
        if (err) reject(err);
        const textByLine = data.split("\n").slice(0,-1);
        return resolve(textByLine);
     });
    })

}

Теперь вы можете использовать его как:

parseFileList(filename).then(data => console.log(data))
...