javascript - 无法让 Alexa 技能说出 MySQL 查询结果

标签 javascript mysql node.js aws-lambda alexa

我的 Alexa 技能运行在 Lambda 中托管的 Node.JS。我已通过 MySQL 模块成功将代码连接到 AWS MySQL 数据库。但是,我无法让 Alexa 说出我的查询结果。她只是说:“所请求的技能响应存在问题。”

我的控制台日志反射(reflect)了我的数据库字段的值,因此我知道连接已成功建立。出了什么问题?

connection.query('SELECT versetext FROM myverses WHERE id = 3', 
function (error, results, fields) {
console.log(JSON.stringify(results[0].versetext));
var saythis = JSON.stringify(results[0].versetext);
connection.end();
  this.emit(':tell', saythis);

});

这是我的控制台日志:

 Response:
null

Request ID:
"c05ef0f2-0d37-11e8-94ae-e12579c1d8d5"

Function Logs:
START RequestId: c05ef0f2-0d37-11e8-94ae-e12579c1d8d5 Version: $LATEST
2018-02-09T01:22:56.149Z    c05ef0f2-0d37-11e8-94ae-e12579c1d8d5    "Sample value."
END RequestId: c05ef0f2-0d37-11e8-94ae-e12579c1d8d5
REPORT RequestId: c05ef0f2-0d37-11e8-94ae-e12579c1d8d5  Duration: 2026.02 ms    Billed Duration: 2100 ms    Memory Size: 128 MB Max Memory Used: 45 MB  

最佳答案

查询是异步的,这意味着函数在查询返回结果之前返回,您必须使用 promise 来完成请求

var prom = new Promise((success,reject) => {

connection.query('...',  (errr, result, fields) => {

   speechText = result[0].versetext;
   connection.end();
   var ret = handlerInput.responseBuilder
   .speak(speechText)
   .reprompt(speechText)
   .getResponse();

   success(ret);

  });

});

return prom;

关于javascript - 无法让 Alexa 技能说出 MySQL 查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48693327/

相关文章:

javascript:class.property 与 class.prototype.property 模拟静态属性

PHP问卷计算设计

php - mysql行计数器

javascript - 多个类之间可以共享数据吗?

javascript - 如何正确设置原型(prototype)?

javascript - CSS 在 Firefox 中不工作(或 HTML 显示为简单文本)

javascript - 如何在javascript中清空表格?

javascript - 使用 React 添加和删除 CSS 类

mysql - Knockout.js 从 mysql 数据库更新值

node.js - NodeJS 抓取 .ashx 页面