我正在AWS Lambda
上使用NodeJS运行时,最近我收到AWS
的通知,通知他们将停止维护lambdas
在node.js 6.10
运行时上运行。
基本上,我试图从S3
获取对象并从这些对象创建流,以便从xlsx
文件中提取数据。
这是我要在lambda内部执行的代码。此代码块在node.js 6.10
运行时中起作用,但在node.js 8.10
运行时中不起作用。
function getWorkbookFromS3(s3Params): Promise<XLSX.WorkBook> {
return new Promise((resolve, _reject) => {
const buffers = [];
S3Service.getObject(s3Params).createReadStream()
.on('error', (error) => {
console.log(error);
}).on('data', (chunk) => {
buffers.push(chunk);
}).on('end', () => {
const buffer = Buffer.concat(buffers);
const workbook = XLSX.read(buffer, { type: 'buffer', cellDates: true });
resolve(workbook);
})
});
}
关于如何解决此问题的任何线索?
答案 0 :(得分:0)
问题与在lambda
中使用此函数有关。我没有得到任何错误,也没有得到任何结果,因为一旦lambda
停止执行,函数getWorkbookFromS3(s3Params)
内的代码就无法执行,因为它是一个承诺。
我之前调用此函数的方式如下:
getWorkbookFromS3(s3Params).then((d) => {
// do someting
});
但是没有用。结果,我不得不添加一个await
关键字以强制执行promise
并阻止lambda
停止执行。
await getWorkbookFromS3(s3Params).then((d) => {
// do someting
});