【发布时间】:2017-11-11 09:55:59
【问题描述】:
我实现了一个删除表中的多条记录的代码,当删除完成时,然后转到另一个表来删除它的记录。但问题是我没有删除表的所有记录,只是查询一些具有范围键(id = '1423')的记录以及与我获得的该键相关的所有记录,然后使用 foreach 循环删除记录.我也在其他表中做同样的事情。
关于我的代码的关键点:在两个表中,“id”都不是主键,在表 A 和表 B 中,我都有相同的“id”=1423。
代码 sn-p:
data: function(tableName, id){
return new Promise(function(resolve, reject){
var scanParams = {
TableName: tableName,
KeyConditionExpression: "#getId = :p",
ExpressionAttributeNames:{
"#getId": "id"
},
FilterExpression: '#getId = :v1' ,
ExpressionAttributeValues:{
":v1" : id
}
};
AWS.docClient.scan(scanParams, function(err, data) {
if (!_.isNil(err)) {
console.error("Error :", JSON.stringify(err, null, 2));
reject(err)
} else {
if(_.size(data.Items) > 0){
data.Items.forEach(function(obj, i){
var params = {
TableName: scanParams.TableName,
Key: {"hashKey":obj[hashKey]},
ReturnValues: 'NONE', // optional (NONE | ALL_OLD)
ReturnConsumedCapacity: 'NONE', // optional (NONE | TOTAL | INDEXES)
ReturnItemCollectionMetrics: 'NONE', // optional (NONE | SIZE)
}
AWS.docClient.delete(params, function(err, data) {
if (err) {
console.error("Unable to delete items :", JSON.stringify(err, null, 2));
reject(err)
} else {
console.log('Deleted the records in the table')
resolve('success')
}// successful response
});
})
} else {
console.log('No record in table')
resolve('success')
}
}
})
})
}
我在其他两个文件中调用这个数据函数只是在参数中传递了不同的表名,即这里:function(tableName, id) 和 id 是相同的。还想知道异步方式是否有任何漏洞,它是否比我使用的同步方法更好。任何性能问题或运营成本。
【问题讨论】:
标签: node.js asynchronous promise amazon-dynamodb aws-lambda