首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DynamoDb UpdateItem运行两次

DynamoDb UpdateItem运行两次
EN

Stack Overflow用户
提问于 2020-10-25 05:23:37
回答 1查看 243关注 0票数 1

当我通过update (updateItem)更新一个项目时,更新函数会被调用两次,我的值也会被添加两次。我使用async/await,它应该可以工作。

代码语言:javascript
运行
复制
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

但是结果输出

代码语言:javascript
运行
复制
 console.log("updateDb:", JSON.stringify(data.Attributes, null, 2));

打印2次,并且持续时间值也被加到来自db的值上2次。

它应该只调用一次...有谁知道我的错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-25 16:11:27

这看起来像是因为你同时使用了方法回调和promise,所以尽量只使用promise方法。

替换:

代码语言:javascript
运行
复制
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();

通过以下方式:

代码语言:javascript
运行
复制
await ddb.update(param).promise().then(r => {
    console.log("updateDb:", JSON.stringify(data.Attributes, null, 2))
}).catch(e => {
    console.log("Error", e);
});

也类似于Node JS + AWS Promise Triggered Twice (仅在ses服务中)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64518137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档