this.emit
только что заканчивает выполнение лямбды, и функция putItem
не может быть завершена в своей области.Вы должны позвонить this.emit
, когда putItem
завершится.
Этого можно добиться с помощью async/await
(убедитесь, что lambda использует node.js v8.10):
'LaunchRequest': async function () {
await nameExport("testName");
let speech = new Speech ();
speech.say("Welcome by Emotions.")
speech.pause("100ms")
speech.say("Do you want to assess your current emotion?")
let speechOutput = speech.ssml(true);
this.emit(":ask", speechOutput)
},
async function nameExport(name) {
var tableName = "myinfo";
return new Promise((resolve, reject) => { dynamodb.putItem({
"TableName": tableName,
"Item": {
"name": {
"S": name
}
}
}, function(err, data) {
if (err) {
reject(err);
} else {
console.log('Dynamo Success: ' + JSON.stringify(data, null, ' '));
resolve();
}
})});
};
Или без async/await
, выдавая «: ask» при обратном вызове, что не очень щадящее решение:
'LaunchRequest': function () {
let speech = new Speech ();
speech.say("Welcome by Emotions.")
speech.pause("100ms")
speech.say("Do you want to assess your current emotion?")
let speechOutput = speech.ssml(true);
nameExport("testName", () => this.emit(":ask", speechOutput));
},
function nameExport(name, callback) {
var tableName = "myinfo";
return new Promise((resolve, reject) => { dynamodb.putItem({
"TableName": tableName,
"Item": {
"name": {
"S": name
}
}
}, function(err, data) {
if (err) {
// some error handling
} else {
callback()
}
})});
};
Кстати, есть Alexa SDK 2.0 - 1.0, который вы хотите использовать, больше не поддерживается.Я бы порекомендовал перейти на последнюю версию (переписав код или используя адаптер )