Как читать и использовать данные из DynamboDB в навыке Alexa

#javascript #promise #async-await #amazon-dynamodb #alexa

#javascript #обещание #асинхронное ожидание #amazon-dynamodb #alexa

Вопрос:

Я создаю навык Alexa, который извлекает некоторые данные из таблицы DynamoDB, а затем должен использовать их в другой функции или в качестве речевого вывода. Моя идея состояла в том, чтобы использовать async / await, но я не уверен, как это сделать.

 var AWS = require('aws-sdk');
AWS.config.update({region: 'us-west-2'});

var docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});


var params = {
 TableName: 'someTableName',
 Key: {'UserID': '1'}
};

var getDataPromise = docClient.get(params).promise();

getDataPromise.then(
  function(data) {
    console.log(data.Item);  // I need to return data.Item to somehow use in .speechoutput()
  }
).catch(
  function(err) {
    console.log(err);
  }
);
 

Если я создам async функцию, я не уверен, куда я буду помещать await или как я буду возвращать данные .speechoutput() . Я пробовал ставить await перед docClient функцией, но, похоже, это не работает.

 var AWS = require('aws-sdk');
AWS.config.update({region: 'us-west-2'});

var docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});

async function getData() {
  var params = {
   TableName: 'someTableName',
   Key: {'UserID': '1'}
  };

  var getDataPromise = await docClient.get(params).promise();

  getDataPromise.then(
    function(data) {
      console.log(data.Item);  // I need to return data.Item to somehow use in .speechoutput()
    }
  ).catch(
    function(err) {
      console.log(err);
    }
  );
}

getData();
 

Ответ №1:

Похоже, вы, возможно, не получаете async / await.

Await заставляет JS ждать, пока обещание не будет разрешено, и получает все, что возвращается при разрешении.

getDataPromise содержит результат docClient.getParams() операции после ее разрешения, который должен быть объектом данных.

AFAICT, ваш код завершается с ошибкой, потому что вы пытаетесь «затем» использовать обычный старый объект данных.