DynamoDb UpdateItem运行两次

熊太郎

当我通过update(updateItem)更新项目时,更新函数将被调用两次,并且我的值将被添加两次。我使用异步/等待,它应该工作。

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);
});

也类似于Node JS + AWS Promise两次触发(仅在ses服务中)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AWS Lambda DynamoDB putItem始终执行两次

来自分类Dev

JavaFX ListCell updateItem 执行两次?

来自分类Dev

如何每天两次使用Lambda / DynamoDB打开/关闭我的AWS EC2 Scheduler?

来自分类常见问题

使用DynamoDB的updateItem和数值

来自分类常见问题

DynamoDb PutItem与UpdateItem之间的区别?

来自分类Dev

使用DynamoDB的updateItem和数值

来自分类Dev

Cognito和DynamoDB:“未经授权执行:dynamodb:UpdateItem在资源上”

来自分类Dev

processMessage运行两次

来自分类Dev

TimePickerDialog运行两次

来自分类Dev

两次运行服务

来自分类Dev

SlideUp()运行两次

来自分类Dev

dynamodb updateItem将属性设置为对象

来自分类Dev

脚本在raspbian中运行两次

来自分类Dev

两次运行Maven编译

来自分类Dev

Spring @Scheduled任务运行两次

来自分类Dev

SQLiteOpenHelper onCreate运行两次?

来自分类Dev

WordPress查询运行两次

来自分类Dev

JSFiddle两次运行Angular代码

来自分类Dev

PHP脚本运行两次

来自分类Dev

COUNT()是否运行两次?

来自分类Dev

Laravel Scheduler每天运行两次

来自分类Dev

Maven着色插件运行两次

来自分类Dev

Android setOnCheckedChangeListener运行两次

来自分类Dev

debounceTime使窗体控件运行两次

来自分类Dev

不能两次运行IAsyncEnumerable枚举?

来自分类Dev

React for循环仅运行两次

来自分类Dev

React Hook setstate运行两次

来自分类Dev

Tkinter消息框运行两次

来自分类Dev

我的下载Servlet运行两次