Чтение данных через корзину S3 с использованием лямбда-функции - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь прочитать данные из корзины s3 через лямбду, и этот файл является файлом Excel (.xlsx), но когда я печатаю поток, он пуст.

const xlsx = require('xlsx');
const AWS = require('aws-sdk');
var ss = new AWS.S3();

exports.handler = async (event) => {

 var file = ss.getObject({ Bucket: 'kapoorbck', Key: 'testdata.xlsx' }).createReadStream();
//console.log(file);
   var buffers = [];

  file.on('data', (data) => {
    buffers.push(data);
  });
console.log(buffers);


file.on('end', function () {
    var buffer = Buffer.concat(buffers);
    var workbook = xlsx.read(buffer);
    //var sheet_name_list = workbook.SheetNames;

    console.log(workbook);
});



return{
  statusCode :200,
  body : "Success"
}

}

1 Ответ

0 голосов
/ 13 января 2020

Я не вижу ничего плохого в основной логике c, кроме двух вещей

  1. Вы пытаетесь распечатать console.log(buffers); синхронно. Чтение из потока - это асинхронная c операция, поэтому console.log должен находиться внутри либо data прослушивателя событий, либо end прослушивателя событий.
  2. Вторым моментом является ваш оператор return, который также находится в конец, поэтому он будет выполнен первым, так как он не будет ждать окончания асинхронной операции sh. Вам нужно переместить его в приемник конечных событий, чтобы лямбда-оператор знал, когда его вернуть, и завершил sh работу.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...