如何从AWS Lambda上的Promise返回自定义JSON

时间:2019-04-09 09:37:54

标签: node.js aws-lambda amazon-dynamodb

我正在设置一个API,以使用带有Node.js 8.10的Async函数在DynamoDB上扫描表。当我调用扫描方法时,我使用AWS开发工具包2.3 Promise来确保执行查询。但是,我想返回一个自定义JSON,其中包含状态代码的信息,以及从数据库接收到的数据在主体上的信息。

我为诺言使用了单独的异步函数。该函数接收来自exports.handler函数的用户输入。我使用查询信息创建params数组,最后调用scan函数对表执行查询,作为一个承诺。最后,在promise中,我用要返回的信息创建了一个新变量,但是即使我返回了var,它也将始终返回promise。


const paramQuery = async () => {
    return await  paramQuery();
}

const paramQuery = async () => {
    let params = {
        TableName: process.env.TABLE_NAME;
    };

    var queryParams = documentClient.scan(params).promise();
    queryParams.then(function(data) {
        let response = {
            "statusCode": 200,
            "body": (data.Items)
        }
        return response;
    }).catch(function(err){
        console.log(err);
    });
    return queryParams;
}


// Expected result:

Response:
{
  "statusCode": 200,
  "body": [{
    "ParameterName": "Name",
    "ParameterValue": "Value"
  }, {
    "ParameterName": "Name",
    "ParameterValue": "Value"
  }]
}

// Current result:

Response:
{
  "Items": [
    {
     "ParameterName": "Name",
     "ParameterValue": "Value"
    },
    {
     "ParameterName": "Name",
     "ParameterValue": "Value"
    }
  ],
  "Count": 2,
  "ScannedCount": 2
}

我已经尝试寻找类似的问题,但是没有找到与我的问题完全相关的问题。理想情况下,应避免显式调用resolvereject

1 个答案:

答案 0 :(得分:0)

尝试一下。

const paramQuery = async () => {
    return await  paramQuery();
}

const paramQuery = async () => {
    let params = {
        TableName: process.env.TABLE_NAME;
    };
return new Promise((resolve, reject) => {
    var queryParams = documentClient.scan(params).promise();
    queryParams.then(function(data) {
      resolve({
            "statusCode": 200,
            "body": (data.Items)
        });
    }).catch(function(err){
       reject(err)
    });
});
}