我正在尝试使用适用于NodeJS的AWS开发工具包将数据写入Amazon Kinesis。我正在使用要与async / await一起使用的putRecords方法。将记录写入Kinesis后,我需要执行一些其他步骤。我希望这是一个同步过程,所以我不能只使用回调。
我尝试了使用promise,async / await的几种不同方法,但是似乎都没有用。
使用异步/等待:
let response = await kinesisPutRecords({
Records: //records,
StreamName: //streamName
});
async function kinesisPutRecords(recordsParams){
return new Promise((resolve, reject)=>{
kinesisClient.putRecords(recordsParams,function (err, data) {
if (err)
reject(err);
resolve();
}
});
}
承诺
let response = await kinesisClient.putRecords(recordsParams).promise();
console.log(response);
此方法在循环内使用,循环继续进行而无需等待此调用完成。
这两种方法都可以与S3.getObject()一起使用;
感谢您的帮助。谢谢。
我发现上面的代码有问题。它只是缺少try ... catch块导致了此问题。在我的完整代码中,我仍然遇到这个问题,但是我能够找到根本原因。
我正在csv tarnsform中使用NodeJS流。在转换函数内部,等待不起作用。可能是因为流异步并且不会暂停?
接近我的情况的代码:
const transformer = transform(function (record) {
//add records to an array until a threshold is met and then push to kinesis.
let response = await kinesisPutRecords();
console.log(response);
}, function(err, output){
//logic to push remaining records
});
fileReadStream
.pipe(gunzip) //unzip the file
.pipe(csvParser) //to parse the csv
.pipe(transformer);
async function kinesisPutRecords(recordsParams){
return new Promise((resolve, reject)=>{
try{
kinesisClient.putRecords(recordsParams,function (err, data) {
if (err)
reject(err);
resolve();
});
}
catch(exception ex){
reject();
}
});
}