dynamodb putItem回调函数不起作用

时间:2019-01-15 06:22:06

标签: javascript amazon-dynamodb

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = async (event) => {

    var note = {};
    note.noteid = new Date().getTime();
    note.content = event.queryStringParameters["content"];

    var res = {};

    const response = {
        statusCode: 200,
        body: JSON.stringify(note),
    };

    var obj = {
        'TableName':'notes',
        'Item': {
          'note_id': {
            S: '2'
          },
          'name': {
            S: 'content'
          }
        },
        'ReturnConsumedCapacity': "TOTAL"
    };

    dynamodb.putItem(obj, function(err,result){
        console.log('function called!!');
        console.log(err);

        return response;
    });

};

我的putItem无法正常工作,没有调用回调函数。我已经拥有对该用户角色的完全访问权限,但仍未调用函数。

1 个答案:

答案 0 :(得分:3)

假设您正在使用AWS Lambda。由于您使用的是async / await模式,因此http响应最终是async (event) => {}返回的内容。就您而言,那不算什么。您打电话给putItem,但没有等待。 async (event) => {}之后不返回任何内容。由于函数已返回,因此您的putItem调用没有回调的机会。

您应该将putItem调用转换为promiseawait。然后处理结果并返回http响应。

const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = async (event) => {

    var note = {};
    note.noteid = new Date().getTime();
    note.content = event.queryStringParameters["content"];

    var res = {};

    const response = {
        statusCode: 200,
        body: JSON.stringify(note),
    };

    var obj = {
        'TableName':'notes',
        'Item': {
          'note_id': {
            S: '2'
          },
          'name': {
            S: 'content'
          }
        },
        'ReturnConsumedCapacity': "TOTAL"
    };

    try
    {
        var result = await dynamodb.putItem(obj).promise();
        //Handle your result here!
    }
    catch(err)
    {
        console.log(err);
    }
    return response;
};