除非包装在Promise中,否则节点stream.read不能正常工作

问题描述

如果不将它们包装在Promise中,我将无法使stream.readable处理.csv文件。我们在AWS lambda中进行操作,以25的块为单位读取流。如果流未包装在promise中,则好像它没有执行。没有引发任何错误,没有网络使用,也没有来自.on()内部调用的方法的日志记录。这是Promise中包装的代码:

    const myProm: Readable = await new Promise(() => {
        const myReadStream = new AWS.S3().getObject(params).createReadStream().pipe(csvparser());
    });

    myProm
        .on('readable',async () => {
            let chunk;
            while (null !== (chunk = myReadStream.read(25))) {
                itemArray.push(chunk as BatchWriteItem);
                console.log(itemArray);
                await orchestrateBatchingOfItems(s3Key,itemArray);
                itemArray = [];
            }
        })
        .on('end',() => {
            console.log('CSV file successfully processed');
        });

我们看到的一个问题是正在建立大量的内存使用,就好像没有进行垃圾回收一样。我唯一能想到的可能是导致我读到有关promise中引用的对象的信息,直到承诺被解决后才进行GC处理。如果这是真的,那么它实质上会完全破坏流式传输的好处,而分块给了我们……

添加我不加承诺地尝试的代码:

    const myReadStream = new AWS.S3().getObject(params).createReadStream().pipe(csvparser());

    myReadStream
        .on('readable',() => {
            console.log('CSV file successfully processed');
        });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...