1
スキルとnodejs開発の新機能I've very soon soon。Alexaスキル用のLambda nodejsを使用したDynamoDBからの読み取り
基本的に、私はDynamoDBからデータを読み込み、Alexa上で話そうとしています。
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;
}
});
}
問題はDynamoDB.DocumentClient.get機能がasynchronを実行しているとDoSomethingIntentが実行されると同時に、タイトルの変数が定義されていないということです。
この問題を解決するにはどうすればよいでしょうか?
ddb.get(params, function(err, data) {
if (err) {
}else{
title = data.Item.title;
alexa.registerHandlers(handlers);
alexa.execute();
}
});
しかし、それは私にとって非常に実用的でいないようです:
これまでの私のために働いている唯一のソリューションは、ということでした!
'DoSomethingIntent'インテント内で' get'メソッドを呼び出します。 –
は動作しません。 ddb.get(params、function(err、data){});非同期で実行されます。 –
'DoSomethingIntent':関数(){ のgetData(コールバック(タイトル){ this.response.speak( '現在地データ' +タイトル); this.emit( ':responseReady');}) } –