节点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:等待requestcallback被执行,然后发出: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

您可以在http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html上了解更多关于Lambda编程模型的信息&#x3002;