Javascript AWS Lambda&;节点:流式传输时写入数据-过早结束,数据丢失

Javascript AWS Lambda&;节点:流式传输时写入数据-过早结束,数据丢失,javascript,node.js,amazon-web-services,amazon-s3,node-streams,Javascript,Node.js,Amazon Web Services,Amazon S3,Node Streams,我有一个Lambda函数,它是由对S3存储桶的写入触发的。它读取写入bucket的JSON文件,解析出各个记录,并将它们写入数据库 问题是;我不确定我做错了什么,因为流结束,Lambda在写入所有数据之前退出 我在可读流上处于“流动模式”,并且在db写入期间暂停/恢复。根据文档,这应该可以做到,但它没有按预期工作 Lambda处理器: exports.handler = async (event, context) => { let result = false; try

我有一个Lambda函数,它是由对S3存储桶的写入触发的。它读取写入bucket的JSON文件,解析出各个记录,并将它们写入数据库

问题是;我不确定我做错了什么,因为流结束,Lambda在写入所有数据之前退出

我在可读流上处于“流动模式”,并且在db写入期间暂停/恢复。根据文档,这应该可以做到,但它没有按预期工作

Lambda处理器:

exports.handler = async (event, context) => {
    let result = false;
    try {
        result = await parseData(event);
    } catch (e) {
        console.error(e);
    }
    return result;
};
承诺:

const StreamArray = require("stream-json/streamers/StreamArray");

async parseData(event) {
    try {
        let objectStream = s3.getObject(params).createReadStream();
        const streamParser = StreamArray.withParser();
        return new Promise((resolve, reject) => {
            objectStream.pipe(streamParser).on("data", async streamData => {
                objectStream.pause();
                let result = await writeData(streamData);
                objectStream.resume();
            }).on("finish", () => {
                console.log("STREAM FINISH!");
                resolve(true);
            }).on("error", e => {
                console.error("Stream error:", e);
                reject(e);
            });
        });
    } catch (e) {
        console.error(e);
    }
}

通过简单地用JSONStream交换出流json,这是一个更广泛使用的包。现在真是魅力四射

const JSONStream = require("JSONStream");

async parseData(event) {
    try {
        let objectStream = s3.getObject(params).createReadStream();
        const streamParser = JSONStream.parse("*");
        return new Promise((resolve, reject) => {
            objectStream.pipe(streamParser).on("data", async streamData => {
                streamParser.pause();
                let result = await writeData(streamData);
                streamParser.resume();
            }).on("finish", () => {
                console.log("STREAM FINISH!");
                resolve(true);
            }).on("error", e => {
                console.error("Stream error:", e);
                reject(e);
            });
        });
    } catch (e) {
        console.error(e);
    }
}

JSON文件有多大?你真的需要流媒体吗?@jarmod它可能非常大,我无法预测它的大小,所以应该流媒体。