javascript - Node JS 同步读取一行文本

标签 javascript node.js typescript

我有以下情况,其中我有 data.txt,包含数千行。

我的目标是读取这些文件的每一行并获取一些数据并将其存储在数组中。我使用 readlinefs.createReadStream

这是我做的:

const readingText = async () => {
  const fileStream = fs.createReadStream(
    "./data.txt"
  );

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });

  let dd = [];
  rl.on("line", line => {
    dd.push(line.split(":")[1]);
  });
  rl.on("close", async line => {
    console.log(dd);
    return dd;
  });
};

const someFunc = async () => {
  try {
    const ff = await readingText();
    console.log(ff);
  } catch (err) {
    console.log(err);
    return false;
  }
};

someFunc();

问题是 console.log(ff) 将始终返回 undefinedconsole.log(dd) 正确返回所需的 dd 数组,这是为什么呢?以及如何让 console.log(ff) 等到 ff 变量被分配给 dd 数组的值?

谢谢

最佳答案

基于事件的执行不等待父异步函数。

试试这个:

const readingText = async () => {
  return new Promise((resolve, reject) => {
    const fileStream = fs.createReadStream(
      "./data.txt"
    );

    const rl = readline.createInterface({
      input: fileStream,
      crlfDelay: Infinity
    });

    let dd = [];
    rl.on("line", line => {
      dd.push(line.split(":")[1]);
    });
    rl.on("close", line => {
      console.log(dd);
      return resolve(dd);
    });
  });

};

const someFunc = async () => {
  try {
    const ff = await readingText();
    console.log(ff);
  } catch (err) {
    console.log(err);
    return false;
  }
};

someFunc();

关于javascript - Node JS 同步读取一行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54995110/

相关文章:

angular - 使用 Angular Material 立即关闭对话框模式

javascript - 单击时如何从链接中添加和删除类名?

javascript - 如何改进我使用 Textmate for Ruby on Rails、HTML、CSS 和 Javascript 的方式?

javascript - 如何计算元素相对于屏幕的位置

javascript - 快速 POST 调用时 req.body 为空

node.js - 同一服务器上的多个 Node.js 设置

javascript - Angular 表单验证,在 HTML 上迭代时访问表单控件

javascript - 什么是 php 的 FILTER_SANITIZE_STRING 的 JavaScript 等价物?

node.js - discord js 从用户消息中获取参数并在变量中使用它们显示为未定义

javascript - 自行销毁组件 - angular2