UpdateItem DynamoDb berjalan dua kali
Oct 24 2020
Ketika saya mengupdate item melalui update (updateItem) maka fungsi update dipanggil dua kali dan nilai saya akan ditambahkan dua kali. Saya menggunakan async / await dan seharusnya berfungsi.
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;
}
Output konsol hanya dicetak satu kali
###### updateDb
Tapi hasilnya keluaran
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2));
dicetak 2 kali dan nilai durasi ditambahkan 2 kali juga ke nilai dari db.
Seharusnya hanya menelepon satu kali ... Tolong ada yang tahu kesalahan saya di sini?
Jawaban
3 DoriAviram Oct 25 2020 at 08:11
Sepertinya ini karena Anda menggunakan metode callback dan promise bersama, coba gunakan hanya pendekatan promise.
Menggantikan:
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();
Dengan:
await ddb.update(param).promise().then(r => {
console.log("updateDb:", JSON.stringify(data.Attributes, null, 2))
}).catch(e => {
console.log("Error", e);
});
Juga mirip dengan Node JS + AWS Promise Triggered Twice (hanya dalam layanan ses)
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'