首页 > 解决方案 > AWS Lambda javascript-sdk,实现 dynamodb putItem 方法接收超时

问题描述

我已经尝试了两种方法Async HandlersNon-Async Handlers实现 dynamodb putItem 方法。它返回了无效响应。它适用于注释 setTimeout 函数。

如前所述,我尝试以非异步处理程序的方式承诺 dynomodb putItem 方法和官方文档https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html。但仍然没有运气。有人可以指出我的代码问题吗?

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

exports.lambdaHandler = async function(event) {
    const promise = new Promise(function(resolve, reject){

        // setTimeout(function(){
        //     console.log("resolvedx")
        //     resolve({statusCode: 200, body: "resolvedx"})
        // }, 200)

        dynamodb.putItem({
            TableName: 'CUSTOMER_LIST',
            Item: {
                'CUSTOMER_ID': { N: '012' },
                'CUSTOMER_NAME': { S: 'zzzza' }
            }
        }
        , function(err, data) {
            if (err) {
                console.log("err", err);
                reject(JSON.stringify({statusCode:200, body:err}));
            } else {
                console.log("success", data);
                resolve(JSON.stringify({statusCode:200, body:data}));
            }
        })
    })

    return promise
}

作为Non-Async Handlers

exports.lambdaHandlerx = (event, context, callback) => {


    const dbPromise = () => new Promise((resolve, reject) => {

        console.log("inside db promise")
        dynamodb.putItem({
                TableName: 'CUSTOMER_LIST',
                Item: {
                    'CUSTOMER_ID': { N: '023' },
                    'CUSTOMER_NAME': { S: 'asdddwa' }
                }
            }
            , function(err, data) {
                if (err) {
                    console.log("err", err);
                    reject(err);
                } else {
                    console.log("success", data);
                    resolve(data);
                }
            })
    })

    Promise.all([dbPromise()]).then(data => {
        console.log("then", data)
        callback(null, {
            'statusCode': 200,
            'body': JSON.stringify({
                message: "dataxz"+ JSON.stringify(data)
            })
        })
     }
    ).catch(e => {
        callback(null, {
            'statusCode': 200,
            'body': JSON.stringify({
                message: 'err'
            })
        })
    })


}

输出

Function returned an invalid response (must include one of: body, headers, multiValueHeaders or statusCode in the response object). Response received:

标签: node.jsamazon-web-servicesaws-lambda

解决方案


推荐阅读