Dynamodb batchWrite 在具有异步的 Lambda 中不起作用

Dynamodb batchWrite doesn't work in Lambda with Async

batchWrite 不适用于 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.

你们有没有相同的行为?

您不能将回调方法与 async/await 方法结合使用。这里最简单的做法是全部设为 async/await(并且不要忘记调用时的 .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;
  }
};