从 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
});