从 Nodejs6.1 到 Nodejs8.1 的运行时更新后 GetObject() 不工作
GetObject() not working after runtime update from Nodejs6.1 to Nodejs8.1
我正在使用 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);
})
});
}
关于如何解决这个问题的任何线索?
此问题与在 lambda
中使用此函数有关。我没有得到任何错误,也没有得到任何结果,因为一旦 lambda
停止执行,函数 getWorkbookFromS3(s3Params)
中的代码就无法执行,因为它是一个承诺。
我之前调用这个函数的方式是这样的:
getWorkbookFromS3(s3Params).then((d) => {
// do someting
});
但是没有用。结果,我不得不添加一个 await
关键字以强制执行 promise
并防止 lambda
停止执行。
await getWorkbookFromS3(s3Params).then((d) => {
// do someting
});
我正在使用 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);
})
});
}
关于如何解决这个问题的任何线索?
此问题与在 lambda
中使用此函数有关。我没有得到任何错误,也没有得到任何结果,因为一旦 lambda
停止执行,函数 getWorkbookFromS3(s3Params)
中的代码就无法执行,因为它是一个承诺。
我之前调用这个函数的方式是这样的:
getWorkbookFromS3(s3Params).then((d) => {
// do someting
});
但是没有用。结果,我不得不添加一个 await
关键字以强制执行 promise
并防止 lambda
停止执行。
await getWorkbookFromS3(s3Params).then((d) => {
// do someting
});