AWS S3 Readstream returns 无数据
AWS S3 Readstream returns no data
我有一个将文件上传到 S3 的应用程序,并触发了一个事件以通过 Lambda 函数处理它们。
上传文件时,我可能会在 Cloud Watch 日志上看到函数执行,但是没有返回任何数据,也没有抛出任何错误并且从未调用 on('end')
处理程序。
正在处理的文件是.csv,我可以打开它们并手动检查内容。
对可能发生的事情有什么想法吗?
这是我的代码:
let es = require('event-stream');
let readStream = s3.getObject({
Bucket: event.Records[0].s3.bucket.name,
Key: event.Records[0].s3.object.key
}).createReadStream();
readStream
.pipe(es.split())
.pipe(es.mapSync(function (line) {
console.log(line);
processLine(line);
}))
.on('end', async () => {
console.log('ON END');
callback(null, 'OK');
})
.on('error', (err) => {
console.error(JSON.stringify(err));
callback(JSON.stringify(err));
})
当 Node.js Lambda 到达主线程末尾时,它会结束所有其他线程。
让您的处理程序 async
然后将最后一次调用承诺为
new Promise((resolve) => {
readStream
.pipe(es.split())
.pipe(es.mapSync(function (line) {
console.log(line);
processLine(line);
}))
.on('end', async () => {
console.log('ON END');
callback(null, 'OK');
})
.on('error', (err) => {
console.error(JSON.stringify(err));
callback(JSON.stringify(err));
resolve();
})
}
我有一个将文件上传到 S3 的应用程序,并触发了一个事件以通过 Lambda 函数处理它们。
上传文件时,我可能会在 Cloud Watch 日志上看到函数执行,但是没有返回任何数据,也没有抛出任何错误并且从未调用 on('end')
处理程序。
正在处理的文件是.csv,我可以打开它们并手动检查内容。
对可能发生的事情有什么想法吗?
这是我的代码:
let es = require('event-stream');
let readStream = s3.getObject({
Bucket: event.Records[0].s3.bucket.name,
Key: event.Records[0].s3.object.key
}).createReadStream();
readStream
.pipe(es.split())
.pipe(es.mapSync(function (line) {
console.log(line);
processLine(line);
}))
.on('end', async () => {
console.log('ON END');
callback(null, 'OK');
})
.on('error', (err) => {
console.error(JSON.stringify(err));
callback(JSON.stringify(err));
})
当 Node.js Lambda 到达主线程末尾时,它会结束所有其他线程。
让您的处理程序 async
然后将最后一次调用承诺为
new Promise((resolve) => {
readStream
.pipe(es.split())
.pipe(es.mapSync(function (line) {
console.log(line);
processLine(line);
}))
.on('end', async () => {
console.log('ON END');
callback(null, 'OK');
})
.on('error', (err) => {
console.error(JSON.stringify(err));
callback(JSON.stringify(err));
resolve();
})
}