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