Vik*_*ash 5 lambda synchronous amazon-web-services
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;
});
Run Code Online (Sandbox Code Playgroud)
扫描不是等待返回输出而是进入下一步。我们如何运行从 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();Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
Vij*_*han -5
您不需要同步运行,这不是一个好主意。从扫描中执行回调,并在接收回调的地方执行所有其他逻辑,
const params = {
TableName: 'item-table',
FilterExpression : "#tagname = :itemId",
ExpressionAttributeNames: {"#tagname": "itemId"},
ExpressionAttributeValues: {":itemId": "000001"}
};
var item ="";
dynamo.scan(params, function(err, data)
{
callback(err,data);
});Run Code Online (Sandbox Code Playgroud)
例如,您可以重构如下代码,
scanDynamoDB(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;
});
}
})
function scanDynamoDB(callback)
{
const params = {
TableName: 'item-table',
FilterExpression : "#tagname = :itemId",
ExpressionAttributeNames: {"#tagname": "itemId"},
ExpressionAttributeValues: {":itemId": "000001"}
};
var item ="";
dynamo.scan(params, function(err, data)
{
callback(err,data);
});
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6951 次 |
| 最近记录: |