微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决除非包装在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 举报,一经查实,本站将立刻删除。