javascript readline 流关闭事件没有被触发
javascript readline stream close event doesn't get triggered
我正在尝试学习 javascript 流并尝试将线条转换为对象。在这里,我通过 getObject 从 s3 文件流式传输,我能够将行转换为 json 格式,但是,我看不到 close
事件触发了 readline。
var aws = require('aws-sdk');
var readline = require('readline');
var path = require('path');
var fs = require('fs');
var outstream = new (require('stream'))()
var s3 = new aws.S3({
apiVersion: "2006-03-01",
accessKeyId: "foobar",
secretAccessKey: "foobar"
});
var readParams = {
Bucket : "bucket", // name of the bucket
Key: "key" // exact file name
}
var readStream = s3.getObject(readParams).createReadStream();
var lineReader = readline.createInterface({
input: readStream,
output: outstream
});
var record = {};
var result = [];
lineReader.on('line', function(line) {
var lineStr = line.toString();
if (lineStr.includes("EOE")) {
result.push(record);
record = {};
lineReader.pause();
} else {
lineReader.resume();
}
var strArr = lineStr.split("=");
var key = strArr[0];
var value = strArr[1];
if(key === 'RequestID' || key === 'StartTime' || key === 'Time' || key === 'Operation') {
value = value.trim().replace(" ms", "");
record[[key]] = value;
}
}).on('close', function() {
console.log("Finished");
});
当我完成流式 s3 获取请求后,我无法看到 "Finished"。感谢您的帮助
我通过删除 linereader.pause()
和 linereader.resume()
行解决了这个问题。我认为如果行包含 EOE 暂停 reader 并跳过该行,暂停和恢复的方式将起作用。如果行不包含 EOE,则处理记录并继续。所以基本上这是工作代码。
lineReader.on('line', function(line) {
var lineStr = line.toString();
if (lineStr.includes("EOE")) {
result.push(record);
record = {};
} else {
var strArr = lineStr.split("=");
var key = strArr[0];
var value = strArr[1];
if(key === 'RequestID' || key === 'StartTime' || key === 'Time' || key === 'Operation') {
value = value.trim().replace(" ms", "");
record[[key]] = value;
}
}
}).on('close', function() {
console.log("Finished");
});
感谢大家的帮助!
我正在尝试学习 javascript 流并尝试将线条转换为对象。在这里,我通过 getObject 从 s3 文件流式传输,我能够将行转换为 json 格式,但是,我看不到 close
事件触发了 readline。
var aws = require('aws-sdk');
var readline = require('readline');
var path = require('path');
var fs = require('fs');
var outstream = new (require('stream'))()
var s3 = new aws.S3({
apiVersion: "2006-03-01",
accessKeyId: "foobar",
secretAccessKey: "foobar"
});
var readParams = {
Bucket : "bucket", // name of the bucket
Key: "key" // exact file name
}
var readStream = s3.getObject(readParams).createReadStream();
var lineReader = readline.createInterface({
input: readStream,
output: outstream
});
var record = {};
var result = [];
lineReader.on('line', function(line) {
var lineStr = line.toString();
if (lineStr.includes("EOE")) {
result.push(record);
record = {};
lineReader.pause();
} else {
lineReader.resume();
}
var strArr = lineStr.split("=");
var key = strArr[0];
var value = strArr[1];
if(key === 'RequestID' || key === 'StartTime' || key === 'Time' || key === 'Operation') {
value = value.trim().replace(" ms", "");
record[[key]] = value;
}
}).on('close', function() {
console.log("Finished");
});
当我完成流式 s3 获取请求后,我无法看到 "Finished"。感谢您的帮助
我通过删除 linereader.pause()
和 linereader.resume()
行解决了这个问题。我认为如果行包含 EOE 暂停 reader 并跳过该行,暂停和恢复的方式将起作用。如果行不包含 EOE,则处理记录并继续。所以基本上这是工作代码。
lineReader.on('line', function(line) {
var lineStr = line.toString();
if (lineStr.includes("EOE")) {
result.push(record);
record = {};
} else {
var strArr = lineStr.split("=");
var key = strArr[0];
var value = strArr[1];
if(key === 'RequestID' || key === 'StartTime' || key === 'Time' || key === 'Operation') {
value = value.trim().replace(" ms", "");
record[[key]] = value;
}
}
}).on('close', function() {
console.log("Finished");
});
感谢大家的帮助!