const params = {
TableName: 'item-table',
FilterExpression : "#tagname = :itemId",
ExpressionAttributeNames: {"#tagname": "itemId"},
ExpressionAttributeValues: {":itemId": "000001"}
};
var item ="";
dynamo.scan(params, function(err, data)
{
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
item = err;
} else {
console.log("Query succeeded.");
data.Items.forEach(function(item) {
item += item.itemName;
});
}
return item;
});
扫描不是等待返回输出而是进入下一步。我们如何运行从 lambda 到 dynamodb 的同步调用。
最佳答案
如果您确实需要同步扫描,您可以使用以下方式之一:
1.使用JavaScript的Promise资源:
const params = {
TableName: 'item-table',
FilterExpression : "#tagname = :itemId",
ExpressionAttributeNames: {"#tagname": "itemId"},
ExpressionAttributeValues: {":itemId": "000001"} };
function scan(params) {
return new Promise((resolve, reject) => {
dynamo.scan(params, (err, data) => {
if (err)
reject(err);
else
resolve(data);
};
};
}
async function syncScan() {
var data;
try {
data = await scan(params);
console.log("Query succeeded.");
}
catch (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
}
return data;
}
syncScan();
2.使用aws-sdk返回对象:
const AWS = require('aws-sdk');
AWS.config.update({ region: 'sa-east-1' });
const docClient = new AWS.DynamoDB.DocumentClient();
async function syncScan() {
const params = {
TableName: 'item-table',
FilterExpression : "#tagname = :itemId",
ExpressionAttributeNames: {"#tagname": "itemId"},
ExpressionAttributeValues: {":itemId": "000001"}
};
const awsRequest = await docClient.scan(params);
const result = await awsRequest.promise();
console.log(result.Items); // <<--- Your results are here
}
syncScan();
关于amazon-web-services - 如何在 lambda 中运行同步 dynamodb 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47140031/