Причина, по которой это происходит, в том, что alexa-skill-kit
позаботится о вашем обратном вызове.
См. Документацию . Передавая объект context
, вы позволяете обработчику упаковки (alexaSkillKit(...)
) управлять декодированием и кодированием возвращаемых объектов и полезной нагрузки. Функция обратного вызова обработчика alexSkillKit
ожидает от вас возврата значения.
Для вашего примера кода вы можете сделать следующее:
'use strict';
const alexaSkillKit = require('alexa-skill-kit');
const AWS = require('aws-sdk');
function binDaySkill(event, context, callback) {
alexaSkillKit(event, context, (message) => {
let params = {
Item: {
user_id: '123',
some_data: 'some data here'
},
TableName: 'my_table'
};
let documentClient = new AWS.DynamoDB.DocumentClient();
return documentClient.put(params).promise()
.then((data) => {
// stuff with the data!
return data;
}).catch((err) => {
// stuff with the error
throw err;
});
});
}
n.b. Причина, по которой он работал после нескольких вызовов, заключается в том, что лямбда повторно использует среды, в которых выполняется каждый вызов. Он делает это, эффективно «замораживая» состояние среды и оттаивая его, когда это необходимо снова. Это основа многих оптимизаций, которые делают люди; и это означало, что вы иногда оттаивали среду, находившуюся на полпути через обратный вызов, когда он был заморожен alexaSkillKit, возвращающимся первым.