Vấn đề là tôi cần đặt bối cảnh của mình. Thành công bên trong các lệnh gọi lại của tôi. Rất cảm ơn sqlbot, vì cuộc nói chuyện của anh ấy về các lệnh gọi lại đã dẫn tôi đến việc nghiên cứu nơi mọi thứ thực sự kết thúc quá trình thực thi của chúng.
Vì vậy, rõ ràng khi sử dụng AWS Lambda, nếu "ngữ cảnh" kết thúc trước khi các lệnh gọi lại của bạn được gọi, bạn sẽ không nhận được lệnh gọi lại của mình. Vì vậy, mặc dù tôi đã đặt tất cả các lệnh gọi lại của mình như sau:connect -> query -> end, lệnh gọi lại đầu tiên của chuỗi từ connect không bao giờ được gọi vì "context.succeed" đã được gọi ngay sau đó, điều này đã kết thúc quá trình thực thi.
Đây là mã của tôi tính đến thời điểm hiện tại (đang nhận được một truy vấn thích hợp):
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
};
};