amazon-web-services - 如何在 lambda 中运行同步 dynamodb 请求?

标签 amazon-web-services lambda synchronous

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/

相关文章:

javascript - javascript中的同步调用,但未处理同步

javascript - Javascript 中的异步类是个好主意吗?

amazon-web-services - AWS Cognito : Email verification with Link

amazon-web-services - aws.events 的 EventBridge 规则问题

amazon-web-services - 如何在 Spark MLLib 中为支持向量机配置内核选择和损失函数

c# - 如何使用 lambda 或 linq 订购 asc/dsc

amazon-web-services - Traefik + 让我们在 AWS Lightsail 上加密

c++ - 如何在 C++ 中构建复合 for 循环?

c++ - 将带有存储在 std::function 中的捕获子句的 lambda 转换为原始函数指针

javascript - 如果默认情况下 JavaScript 既不是异步的也不是多线程的,为什么新手通常认为它是(尤其是与其他语言相比)?