Problem polegał na tym, że musiałem umieścić mój context.succeed w moich wywołaniach zwrotnych. Wielkie podziękowania dla sqlbota, ponieważ jego rozmowa o wywołaniach zwrotnych doprowadziła mnie do zbadania, gdzie rzeczy faktycznie kończą ich wykonanie.
Najwyraźniej podczas korzystania z AWS Lambda, jeśli „kontekst” kończy się przed wywołaniem wywołań zwrotnych, nie otrzymasz wywołań zwrotnych. Tak więc, mimo że umieściłem wszystkie moje wywołania zwrotne w następujący sposób:connect -> query -> end, pierwsze wywołanie zwrotne łańcucha z connect nigdy nie zostanie wywołane, ponieważ zaraz potem zostało wywołane "context.succeed", co zakończyło wykonywanie.
Oto mój kod od teraz (od teraz pojawia się prawidłowe zapytanie):
var mysql = require('mysql');
var connection = mysql.createConnection({
...
});
exports.handler = (event, context) => {
try {
if (event.session.new) {
// New Session
console.log("NEW SESSION");
}
switch (event.request.type) {
case "LaunchRequest":
// Launch Request
console.log(`LAUNCH REQUEST`);
context.succeed(
generateResponse({},
buildSpeechletResponse("Welcome to an Alexa Skill, this is running on a deployed lamda function", true)
)
);
break;
case "IntentRequest":
// Intent Request
console.log(`Intent Request`);
console.log('Then run MySQL code:');
connection.connect(function(err) {
console.log('Inside connection.connect() callback');
if (!err) {
console.log("Database is connected ... ");
connection.query("INSERT INTO Users (user_id) VALUES ('TESTNAME')",
function(err, result) {
console.log("Inside connection.query() callback")
if (!err) {
console.log("Query Successful! Ending Connection.");
connection.end();
} else {
console.log("Query error!");
}
});
} else {
console.log("Error connecting database ..." + err.message);
}
context.succeed(
generateResponse({},
buildSpeechletResponse("Welcome to the incredible intelligent MySQLable Alexa!", true)
)
);
});
break;
case "SessionEndedRequest":
// Session Ended Request
console.log(`SESSION ENDED REQUEST`);
break;
default:
context.fail(`INVALID REQUEST TYPE: ${event.request.type}`);
}
} catch (error) {
context.fail(`Exceptiodn: ${error}`)
}
};
//Helpers
buildSpeechletResponse = (outputText, shouldEndSession) => {
return {
outputSpeech: {
type: "PlainText",
text: outputText
},
shouldEndSession: shouldEndSession
};
};
generateResponse = (sessionAttributes, speechletResponse) => {
return {
version: "1.0",
sessionAttributes: sessionAttributes,
response: speechletResponse
};
};