Ich bin neu in Skill und Nodejs Entwicklung und bekam mein erstes Problem sehr bald.Lesen von DynamoDB mit Lambda nodejs für Alexa Skill
Im Grunde versucht Iam, Daten aus DynamoDB zu lesen und über Alexa sprechen zu lassen.
var title;
exports.handler = (event, context, callback) => {
getData();
alexa = Alexa.handler(event, context, callback);
alexa.appId = APP_ID;
alexa.registerHandlers(handlers);
alexa.execute();
};
const handlers = {
'LaunchRequest': function() {
this.emit('DoSomethingIntent');
},
'DoSomethingIntent': function() {
this.response.speak('Here are your data ' + title);
this.emit(':responseReady');
},
};
function getData() {
var ddb = new AWS.DynamoDB.DocumentClient({region:'eu-west-1'});
var params = {
TableName: 'data',
Key: {'data_id' : 1,},
};
ddb.get(params, function(err, data) {
if (err) {
}else{
title = data.Item.title;
}
});
}
Das Problem ist, dass die DynamoDB.DocumentClient.get Funktion asynchron und gleichzeitig ausgeführt wird, wenn der DoSomethingIntent läuft der Titel Variable ist nicht definiert.
Was wäre die beste Vorgehensweise, um dieses Problem zu lösen?
Die einzige Lösung, die bisher für mich gearbeitet hat war, dass:
ddb.get(params, function(err, data) {
if (err) {
}else{
title = data.Item.title;
alexa.registerHandlers(handlers);
alexa.execute();
}
});
Aber es für mich nicht sehr praktisch scheinen!
rufen Sie 'Get'-Methode innerhalb der' DoSomethingIntent' Intent. –
das funktioniert nicht. ddb.get (params, function (err, data) {}); läuft asynchron. –
'DoSomethingIntent': function() { getData (Callback (Titel) { this.response.speak ('Hier sind Ihre Daten' + title); this.emit (': responseReady');}) } –