gpt4 book ai didi

javascript - 如何使用 AWS JavaScript SDK (dynamoDB) 处理 UnprocessedItems?

转载 作者:数据小太阳 更新时间:2023-10-29 04:38:28 36 4
gpt4 key购买 nike

我正在尝试使用 AWS Lambda 函数来处理来自 SendGrid 的事件。据我了解,该事件将是一个包含可变数量的 JSON 对象的数组,每个对象代表一个给定的事件。我想使用 batchWriteItem 将这些事件写入 DynamoDB 并循环处理,直到我没有返回任何 UnprocessedItems。但是,我陷入了无限循环。现在这是我的代码:

console.log('Loading function');

var aws = require('aws-sdk');
var dynamo = new aws.DynamoDB();
params = {};

exports.handler = function(sg_event, context) {

var items = [];
for(var i = 0; i < sg_event.length; i++) {
var obj = sg_event[i];
var request = {
PutRequest: {
Item: {
email: { S: obj.email },
timestamp: { S: obj.timestamp.toString() },
sg_message_id: { S: obj.sg_message_id },
event: { S: obj.event }
}
}
};
items.push(request);
}

params = {
RequestItems: {
sendgrid_response: items
}
}

do {
dynamo.batchWriteItem( params, function(err, data) {
if(err)
context.fail(err);
else
params.RequestItems = data.UnprocessedItems;
});
} while(!isEmpty(params.RequestItems));
};

function isEmpty(obj) {
return (Object.keys(obj).length === 0);
}

我认为问题在于尝试在回调函数中设置参数,但我不知道我还应该怎么做...我知道我可以在回调函数中使用 UnprocessedItems 调用另一个 batchWriteItem原始的,但我仍然需要能够根据需要多次运行该函数以确保写入所有 UnprocessedItems。如何正确循环 batchWriteItem?

最佳答案

@Daniela Miao,感谢分享解决方案。

我们可以在您发布的代码中添加一个代码块,这将避免 DynamoDB 出现异常。这将在再次请求 DynamoDB 进行批量写入之前检查 params.RequestItems 是否有未处理的数据。

//db is AWS.DynamoDB Client
var processItemsCallback = function(err, data) {
if (err) {
//fail
} else {
var params = {};
params.RequestItems = data.UnprocessedItems;
/*
* Added Code block
*/
if(Object.keys(params.RequestItems).length != 0) {
db.batchWriteItem(params, processItemsCallback);
}
}
};

db.batchWriteItem(/*initial params*/, processItemsCallback);

关于javascript - 如何使用 AWS JavaScript SDK (dynamoDB) 处理 UnprocessedItems?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31882002/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com