我实现了一个 lambda 函数。在测试过程中,项目属性的更新似乎不一致。大部分时候不更新,很少更新。
这是我的代码片段。
const Responses = require('../common/API_Responses.js');
const Dynamo = require('../common/Dynamo.js');
const tableName = process.env.collectionTableName;
exports.handler = async event => {
console.log('event', event);
if(!event.pathParameters || !event.pathParameters.collection_id) {
return Responses._400({message: 'Missing parameters'});
}
const data = JSON.parse(event.body);
const ID = event.pathParameters.collection_id;
console.log(data);
let res = {};
let isKey = false;
Object.keys(data).forEach(function(key) {
if (key == 'collection_name' || key == 'sex' || key == 'designer' || key == 'period') {
console.log('key', key);
isKey = true;
res = Dynamo.edit(ID, tableName, key, data[key]);
}
});
if (isKey) {
return Responses._200({message: `ID: ${ID} has been updated.`, res});
} else {
return Responses._400({message: `ID: ${ID} has not been updated.`, res});
}
}
Dynamo.js
片段
const Dynamo = {
async edit (ID, tableName, updateKey, updateValue) {
let keyName = '';
if (tableName == collectionTableName) {
keyName = 'Collection_ID';
} else if (tableName == patternTableName) {
keyName = 'Pattern_ID';
} else {
throw Error('tableName unidentified.');
}
const params = {
TableName: tableName,
Key: {[keyName]: ID},
UpdateExpression: 'SET #updateKey = :updateValue',
ExpressionAttributeValues: {
':updateValue' : updateValue
},
ExpressionAttributeNames: {
'#updateKey': updateKey,
},
ReturnValues: 'ALL_NEW'
};
console.log(params);
let res = '';
res = await documentClient.update(params, function(err, data) {
if (err) {
throw Error(err);
} else {
return data
}
}).promise();
console.log('res', res);
return res
},
}
希望有人可以帮助我。预先感谢。
我已经搜索并尝试过调试,但碰壁了。
您熟悉 JavaScript 的工作原理及其固有的异步特性吗?在您的代码中,您无法等待任何异步函数,因此会强制 lambda 结束,因为它没有等待更新发生。
res = await Dynamo.edit(ID, tableName, key, data[key]);