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);
}
非常感谢。
我想读取一个有 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);
}
非常感谢。