保存使用 readline 模块制作的数组

Save array made with readline module

我有下一段代码。这是一个函数,必须 return 一个基于 txt 文件的数组。问题是当我逐个打印数组时,它打印得很好。但是当我从界面打印数组时,数组是空的。

const fs = require('fs');
const readline = require('readline');

function read_file(filename) {
   const filePath = './uploads/' + filename;
   var data = []

   data = readline.createInterface({
      input: fs.createReadStream(filePath),
      terminal: false
   }).on('line', function (
      data.push(line);
      console.log(data); // Here the array is filling well
   });

   console.log(data); // Buy here is empty again
}

这是因为 Node.js 的异步架构,您的 console.log 在读取文件任务之前执行。

如果你想要一个真实的结果,你必须让你的功能成为 return 承诺,并且还要注意当你的事件结束时然后解析你的数据。

类似的内容可能会对您有所帮助:

const fs = require('fs');
const readline = require('readline');

async function read_file(filename) {
  const filePath = './uploads/' + filename;
  var readData = [];

  let data = await new Promise((resolve, reject) => {
    try {
      readline.createInterface({
        input: fs.createReadStream(filePath),
        terminal: false
      })
        .on('line', function (line) {
          readData.push(line);
        })
        .on('close', function() {
          resolve(readData);
        });
      }
      catch(e) {
       reject(e);
      }
   });

 console.log(data);
}