#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, ваш код завершается с ошибкой, потому что вы пытаетесь «затем» использовать обычный старый объект данных.