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");
});

感谢大家的帮助!