节点JScallback与Alexa技能
我有一个模块,其中包括一个请求调用,似乎没有得到执行。
var request = require('request'); var Alexa = require('alexa-sdk'); var APP_ID = <my alexa app ID>; var self = module.exports = { handler : function (event, context, callback) { var alexa = Alexa.handler(event, context); alexa.appId = APP_ID; alexa.registerHandlers(self); alexa.execute(); }, "TestIntent": function () { var speechOutput = "Recorded Test"; request("http://www.google.com", function(error, response,body) { return console.log(body); } ); this.emit(':tell', speechOutput); } }
我从来没有看到在Lambda控制台或任何其他地方的console.log中显示的谷歌主体。 我已经尝试了其他调用(比如我的应用服务器API的APIpost),也没有看到那个服务器上显示的。
似乎在请求callback完成之前进程正在closures。
在亚马逊Lambda“testing人员”中,我得到了一个有效的答复。 在Alexa的“testing人员”中,我找回了“loggingtesting”的回应。 而在回声(通过Alexa),我从设备回来“loggingtesting”响应。 所以这个技能似乎很好。 这只是“请求”行动(在这种情况下,只是拉动google.com),这是失败的。
谢谢!!
更新:我至less能够完成呼叫,但可能不是最干净的方式。
var request = require('request'); var Alexa = require('alexa-sdk'); var APP_ID = <my alexa app ID>; var self = module.exports = { handler : function (event, context, callback) { var alexa = Alexa.handler(event, context); alexa.appId = APP_ID; alexa.registerHandlers(self); alexa.execute(); }, "TestIntent": function () { var that = this; var speechOutput = "Recorded Test"; request("http://www.google.com", function(error, response,body) { console.log(body); that.emit(':tell', speechOutput); return; } ); } }
你的(原始)代码不工作,因为你调用this.emit(':tell', speechOutput);
就在request("http://www.google.com",
后request("http://www.google.com",
:tell
函数将调用lambdacallback并终止lambda函数的执行。
您自己find了解决scheme:等待request
callback被执行,然后发出:tell
事件。
请参阅alexa-skills-kit-sdk-for-nodejs代码
https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/response.js#L6
和
https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/blob/master/lib/response.js#L101