当前位置: 首页 > 知识库问答 >
问题:

Dynamodb batchWrite在具有Async的Lambda中不工作

陈飞
2023-03-14

BatchWrit在Laqmbda中不适用于异步。代码将插入一条记录,但它不能。但是,当我删除异步时,它可以工作。

const AWS = require("aws-sdk");
const documentClient = new AWS.DynamoDB.DocumentClient();

AWS.config.update({ region: "us-west-2" });
const tableName = "BlrSession-56pfbzohnvdqpac6asb627z2wu-dev";
exports.handler = async (event, context, callback) => {
  try {
    let games = [];
    games.push({
      PutRequest: {
        Item: {
          id: Math.random().toString(36).substring(2) + Date.now().toString(36),
        },
      },
    });

    let params = {
      RequestItems: {
        [tableName]: games,
      },
    };

    documentClient.batchWrite(params, function (err, data) {
      if (err) {
        callback(err);
      } else {
        callback(null, data);
      }
    });
  } catch (err) {
    return err;
  }
};

结果如下。没有错误。

Ensuring latest function changes are built...
Starting execution...
Result:
null
Finished execution.

你们有同样的行为吗?

共有1个答案

巢权
2023-03-14

不能将回调方法与异步/等待方法结合使用。这里最简单的方法是使其全部异步/等待(不要忘记调用中的.promise())。

const AWS = require("aws-sdk");
const documentClient = new AWS.DynamoDB.DocumentClient();

AWS.config.update({ region: "us-west-2" });
const tableName = "BlrSession-56pfbzohnvdqpac6asb627z2wu-dev";
exports.handler = async (event, context, callback) => {
  try {
    let games = [];
    games.push({
      PutRequest: {
        Item: {
          id: Math.random().toString(36).substring(2) + Date.now().toString(36),
        },
      },
    });

    let params = {
      RequestItems: {
        [tableName]: games,
      },
    };

    return await documentClient.batchWrite(params).promise();
  } catch (err) {
    return err;
  }
};

 类似资料:
  • 我正在做一个应用程序使用flutter框架。在此过程中,我遇到了Dart和中的关键字。谁能告诉我它们有什么不同吗?

  • 问题内容: 我正在使用KMS库使用AWS开发工具包。我想使用异步和等待而不是回调。 但是,当包装在异步函数中时,这是行不通的。 我如何使用异步并在这里等待? 问题答案: 如果您使用版本> 2.x的aws-sdk,则可以将a 转换为具有链功能的promise 。对于您的情况: 的是-回调的第二个参数(在回调风格)。 该是-回调FUNC的第一个参数 注意:表达式仅在异步函数中允许

  • 独立的Spring Boot应用程序中的注释类中的方法不能异步运行。我做错了什么?

  • 我想通过AES 128 CBC加密文本,但在Arduino和在线工具中结果不同。我尝试了不同的Arduino库,但仍然有相同的问题。我在arduino中的代码如下。 键和IV: {0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x 30 }; 或者 { '0', '0', '0', '0', '

  • 代码: 知道是什么导致了这个问题吗。可能与VPC或安全组有关?并给出了思考和建议。谢了。

  • 想改进这个问题吗 通过编辑此帖子,更新问题,使其只关注一个问题。 我试图理解Wait async在C中是如何工作的,有一件事让我很困惑。我知道任何使用await关键字的方法都必须标记为async。我的理解是,当命中带有await关键字的行时,该行下面的代码不会执行。启动异步操作以在等待行中执行语句,并将控件返回给可以继续执行的调用方法。 问题#1:这个假设是正确的还是wait关键字下面的代码仍在执