有一个名为Portal的DynamoDB表,我想通过节点中编写的Lambda函数更新一个项的status
和ts
字段(通过调用 signalJobStart 函数),并等待异步更新函数完成并获得承诺,然后再继续。由于某种原因,未发生更新,但在操作过程中未出现错误。日志中没有错误,我可以在日志中看到“已完成”日志消息。
为什么没有对表中的项目进行更改?为什么在日志中既看不到错误消息也看不到成功消息?
(我也试过没有承诺,结果是一样的。表项不会得到更新--即使是异步的。)
下面是Lambda的代码:
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-1'});
module.exports = {
signalJobStart: function(accountId, jobId) {
console.log("Signaling job start for account %s and job %s", accountId, jobId);
let table = "Portal";
let params = {
TableName: table,
Key:{
"accountid": accountId,
"entity": jobId
},
UpdateExpression: "SET status = :s, ts = :t",
ExpressionAttributeValues:{
":s": "running",
":t": Date.now()
},
ReturnValues:"UPDATED_NEW"
};
let updatePromise = docClient.update(params, function(err, data) {
if (err) {
console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));
}
}).promise();
updatePromise.then(function(data) {
console.log('Success');
}).catch(function(err) {
console.log(err);
});
console.log("FINISHED");
}};
4条答案
按热度按时间wlp8pajw1#
对我有帮助的是:
1.以异步/等待方式执行:
1.确保我写入的字段不是保留字,如下面的示例所示(“data”是保留字):
要对此进行检查:重命名列,比如说,“data 2”-它没有问题。
1.请确保您在IAM控制台的“执行角色”中具有权限。
tez616oj2#
我觉得你可以
然后继续使用
.then(...)
语句流使其工作。就我个人而言,我认为错误处理程序语法(对于update
)可能不会给您带来承诺。如果不行就告诉我。
icomxhvb3#
在您的查询中
status
是reserve keywords并且在dynamodb中被禁止。因此在您的查询中使用ExpressionAttributeNames
。同时使用新的Promise作为句柄Promise
请在下面查看它对您的帮助:
注:还请确认数据库中的
accountid
和entity
均为Key
。zkure5ic4#
在参数中添加表达式属性名称:{“#状态”:“状态”、“#ts”:“ts”}, 应该有效,对我有效