这是方案: 使用AWS Kinesis> 要从Kinesis获取记录,我需要一个分片迭代器> Kinesis不会返回一个新的碎片迭代器直到a 请求已完成> 拨打" getRecords"是异步的> 尝试迭代此过程失败,因为在需要分片迭代器之前请求尚未解决
const getRecordsInShard = (shard, batchSize, streamName) => {
const records = [];
const loop = (response) => {
if (_.isEmpty(response.NextShardIterator)) {
return Promise.resolve(records);
}
records.push(response.Records);
return getRecordsByShardIterator(response.NextShardIterator, batchSize).then(loop);
};
return getStreamIterator(shard.ShardId, shard.SequenceNumberRange.StartingSequenceNumber, (streamName || process.env.KINESIS_STREAM))
.then(response => getRecordsByShardIterator(response.ShardIterator, batchSize))
.then(loop);
};
上述代码失败,因为loop
返回的承诺在返回超级函数之前无法解决。如何使用上一次迭代的返回值作为下一个输入顺序迭代promise函数?
注意事项: 每次迭代都依赖于前一次返回的信息,结果需要从每次迭代中收集记录
答案 0 :(得分:0)
我不知道为什么当图书馆提供商提供使用动力学流的完美示例时它变得如此复杂。
https://github.com/awslabs/amazon-kinesis-client-nodejs/tree/master/samples
它有基本样本和点击流样本。
希望它有所帮助。