DynamoDb UpdateItem 运行两次
DynamoDb UpdateItem runs twice
当我通过 update (updateItem) 更新项目时,更新函数被调用两次,我的值将被添加两次。我使用 async/await,它应该可以工作。
var ddb = new AWS.DynamoDB.DocumentClient({ apiVersion: '2012-08-10' });
async function updateUserGame(tablePostfix, gameId, durationinMin) {
console.log("###### updateUserGame")
var tableUserGames = tableUserGamesWithoutPostfix + tablePostfix;
expressions = {
":duration": parseInt(durationinMin)
}
updateExpressions = "set playDuration = playDuration + :duration";
var params = {
TableName: tableUserGames,
Key: {
id: parseInt(gameId)
},
ExpressionAttributeValues: expressions,
UpdateExpression: updateExpressions,
ReturnValues: "ALL_NEW"
};
return await updateDb(params);
}
async function updateDb(params) {
console.log("###### updateDb")
var savedItem;
// Call DynamoDB to add the item to the table
await ddb.update(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2));
savedItem = data.Attributes;
}
}).promise();
return savedItem;
}
控制台输出只打印一次
###### updateDb
但是结果输出
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2));
打印了 2 次,持续时间值也被添加到 db 的值中 2 次。
它应该只调用一次...请有人知道我的错误吗?
看起来是这样,因为你同时使用方法回调和 promise,尽量只使用 promise 方法。
替换:
await ddb.update(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2));
savedItem = data.Attributes;
}
}).promise();
与:
await ddb.update(param).promise().then(r => {
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2))
}).catch(e => {
console.log("Error", e);
});
也类似于(仅限ses服务)
当我通过 update (updateItem) 更新项目时,更新函数被调用两次,我的值将被添加两次。我使用 async/await,它应该可以工作。
var ddb = new AWS.DynamoDB.DocumentClient({ apiVersion: '2012-08-10' });
async function updateUserGame(tablePostfix, gameId, durationinMin) {
console.log("###### updateUserGame")
var tableUserGames = tableUserGamesWithoutPostfix + tablePostfix;
expressions = {
":duration": parseInt(durationinMin)
}
updateExpressions = "set playDuration = playDuration + :duration";
var params = {
TableName: tableUserGames,
Key: {
id: parseInt(gameId)
},
ExpressionAttributeValues: expressions,
UpdateExpression: updateExpressions,
ReturnValues: "ALL_NEW"
};
return await updateDb(params);
}
async function updateDb(params) {
console.log("###### updateDb")
var savedItem;
// Call DynamoDB to add the item to the table
await ddb.update(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2));
savedItem = data.Attributes;
}
}).promise();
return savedItem;
}
控制台输出只打印一次
###### updateDb
但是结果输出
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2));
打印了 2 次,持续时间值也被添加到 db 的值中 2 次。
它应该只调用一次...请有人知道我的错误吗?
看起来是这样,因为你同时使用方法回调和 promise,尽量只使用 promise 方法。
替换:
await ddb.update(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2));
savedItem = data.Attributes;
}
}).promise();
与:
await ddb.update(param).promise().then(r => {
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2))
}).catch(e => {
console.log("Error", e);
});
也类似于