所以我正在 AWS 中开发一个 lambda,而 node.js 对我来说也是新的。我相当确定这与 nodejs 是异步的有关,并且可以通过 promise / async / await 解决,但没有解决方案可以帮助我。我已经尝试了很多例子,但我无法根据我所拥有的进行调整。我已经将我的代码超级简化为以下内容:
var fs = require('fs');
var es = require('event-stream');
let m = new Map();
const aws = require("aws-sdk");
let params = {...}; //details omitted, but refers to a csv file
let s3 = new aws.S3();
module.exports.handler = (event, context, callback) => {
s3.getObject(params).createReadStream().pipe(es.split()).on('data'), (row) => {
let dat = row.toString().split(',').map(function(x) {return x.trim() });
m.set(dat[0], dat[1]); // there's actually around 100 lines of logic that I'm simplifying
});
console.log(m.size);
我明白为什么我总是会得到大小 0,但我找不到解决方法。地图填充完成后的目标是遍历它并将所有元素推送到 dynamoDB。(我不直接这样做,因为有很多更新并且需要大量 docClient.get / .query / .put)我只需要完成填充地图(换句话说,流已经完成)。我有点担心我已经简化了太多,部分答案将涉及对我省略的逻辑做出额外的承诺,但我将从这里开始,因为测试此代码也会产生大小 0。
帮助将不胜感激,谢谢!