【问题标题】:Convert Lambda synchronise to async event issue将 Lambda 同步转换为异步事件问题
【发布时间】:2021-06-02 20:58:48
【问题描述】:

我正在尝试使用无服务器框架制作基本的待办事项应用程序。我的同步 lambda 函数工作正常,并将我的任务和任务详细信息存储在 dynamodb 表中。我决定将我的同步 lambda 函数转换为异步函数。我正在使用 Postman 测试 api。但现在我有事件触发问题,它不存储我的taskDetails,它只存储我的任务。在我的邮递员中,我可以看到事件触发器,这是post-method,这就是我的get。我不明白我在这里做错了什么。附言。我是 Lambda 新手。

这是同步 lambda 函数

'use strict'
const AWS = require('aws-sdk');
const uuid = require('uuid');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.createTodo = (event, context, callback) => {
  const datetime = new Date().toISOString();
  const data = JSON.parse(event.body);
  const params = {
    TableName: 'todos',
    Item: {
      id: uuid.v1(),
      task: data.task,
      taskDetails: data.taskDetails,
      done: false,
      createdAt: datetime,
      updatedAt: datetime
    }
  };
  dynamoDb.put(params, (error, data) => {
    if (error) {
      console.error(error);
      callback(new Error(error));
      return;
    }
const response = {
      statusCode: 201,
      body: JSON.stringify(data.Item)
    };

    callback(null, response);
  });
}

这是我的 async 并放入 try catch,但出现错误。

'use strict'
const AWS = require('aws-sdk');
const uuid = require('uuid');

const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports.createTodo = async event => {
  const datetime = new Date().toISOString();
  const data = JSON.parse(event.body);
  const params = {
    TableName: 'todos',
    Item: {
      id: uuid.v1(),
      task: data.task,
      taskdetails: data.taskdetails,
      done: false,
      createdAt: datetime,
      updatedAt: datetime
    }
  };

  try {
    let response = await dynamoDb.put(params).promise();
    return {
      statusCode: 200,
      body: JSON.stringify(data),
    }
  } catch (error) {
    console.log(error);
  }
};

【问题讨论】:

    标签: aws-lambda event-handling amazon-dynamodb serverless-framework aws-sdk-js


    【解决方案1】:

    在您的同步代码中,您使用的是taskDetails,而在异步实现中则是taskdetails

    我假设在您的 get 方法中您正在从 taskDetails 读取数据,因此您的 get api 不会返回 taskDetails 作为响应。

    转到 dynamodb 控制台并检查您的 id,您将能够在 taskdetails 属性中看到数据。

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多