Как вернуть пользовательский JSON из обещания на AWS лямбда - PullRequest
0 голосов
/ 09 апреля 2019

Я настраиваю API для сканирования таблицы в DynamoDB, используя функцию Async с Node.js 8.10. Когда я вызываю метод сканирования, я использую обещание AWS SDK 2.3, чтобы убедиться, что запрос выполнен. Однако я хочу вернуть пользовательский JSON с информацией о коде состояния и в теле данных, полученных из базы данных.

Я использую отдельную асинхронную функцию для обещания. Эта функция получает пользовательский ввод от функции exports.handler. Я создаю массив параметров с информацией для запроса и, наконец, вызываю функцию сканирования, чтобы выполнить запрос к таблице в качестве обещания. Наконец, в рамках обещания я создаю новую переменную с информацией, которую я хочу вернуть, но даже если я верну переменную, она всегда вернет обещание.


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
}

Я пытался найти похожие вопросы, но не нашел ни одного, который бы точно касался моей проблемы. В идеале следует избегать явных вызовов resolve или reject.

1 Ответ

0 голосов
/ 09 апреля 2019

Попробуй это.

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)
    });
});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...