Node.js,使用 async/await 和 readline.on 函数

Node.js, using async/await with readline.on function

我想读取一个有 kye 和 value 的文件。

我正在使用 'readline' 逐行读取并将其存储到地图对象。

但它不起作用,只显示 'undefined'。

你们有什么解决办法吗?

非常感谢

#!/usr/bin/env node
const fs = require('fs');
const readline = require('readline');
const hg = require('./js/funtions.js');
if (require.main === module) {
  const args = process.argv
  var propertiesPath;
  if(args.length >= 3){
    propertiesPath = args[2];
  }else {
    console.log("No properties path");
    process.exit(1);
  }
  if (propertiesPath.includes("-p")) {
    propertiesPath = propertiesPath.replace("-p","");
  }

  const file = readline.createInterface({
    input: fs.createReadStream(propertiesPath),
    output: process.stdout,
    terminal: false
  });
  var map = new Map();
  var tokens,key,value;
  file.on('line', (line) => {
    tokens = line.split("=")
    key   = tokens[0];
    value = tokens[1];
    map.set(key,value);
  });
 
  var jsonPath = map.get("jsonPath");
  console.log(jsonPath);
}

using async/await with readline.on function

您没有在代码中使用 await/async

除此之外,file.on('line', …) 注册一个回调,以便为流遇到的每个 line 调用,这是异步发生的。由于这两行代码是在 readline:

找到文件中的任何行之前执行的
var jsonPath = map.get("jsonPath");
console.log(jsonPath);

如果您想在流读取所有行后执行这两行代码,您需要在 close 事件中执行此操作:

file.on('close', () => {
  var jsonPath = map.get("jsonPath");
  console.log(jsonPath);
});

经过研究。 我决定不使用 async/await 函数。 所以我使用了一个简单的逻辑来读取文件并解析为映射对象。 这是我的代码。

#!/usr/bin/env node
const fs = require('fs');
const readline = require('readline');
const hg = require('./js/funtions.js');

if (require.main === module) {
  const args = process.argv
  var propertiesPath;
  if(args.length >= 3){
    propertiesPath = args[2];
  }else {
    console.log("No properties path");
    process.exit(1);
  }

  if (propertiesPath.includes("-p")) {
    propertiesPath = propertiesPath.replace("-p","");
  }

  var lines = require('fs').readFileSync(propertiesPath, 'utf-8')
    .split('\n')
    .filter(Boolean);

  var map = new Map();
  var tokens,key,value;
  for (var i = 0; i < lines.length; i++) {
    tokens = lines[i].split("=")
    key   = tokens[0];
    value = tokens[1];
    map.set(key,value);
  }
  var jsonPath = map.get("jsonPath");
  console.log(jsonPath);
}

非常感谢。