我使用AWS Lambda来推动Alexa Skill Kit开发。在尝试跟踪事件时,我希望脚本在启动时发送HTTP请求,但是从云日志中看起来好像在执行过程中跳过了http.get函数。
代码如下所示(google.com取代了分析跟踪网址 - 已在浏览器中测试过);
exports.handler = function (event, context) {
var skill = new WiseGuySkill();
var http = require('http');
var url = 'http://www.google.com';
console.log('start request to ' + url)
http.get(url, function(res) {
console.log("Got response: " + res.statusCode);
// context.succeed();
}).on('error', function(e) {
console.log("Got error: " + e.message);
// context.done(null, 'FAILURE');
});
console.log('end request to ' + url);
skill.execute(event, context);
};
上下文对象已被注释掉以允许' skill.execute'功能,但这种HTTP请求的任何一种方式都没有执行。只有'开始'并且'结束'记录console.logs,函数内部不记录。
这是一个异步问题吗?感谢。
答案 0 :(得分:1)
您需要确保触发处理程序。有两种方法可以实现这一目标:
我复制并粘贴了整个代码段,但第一行和最后一行除外(因为我没有在任何地方定义customSkill
)。我能够获得200
响应代码。
答案 1 :(得分:1)
为了成功完成http请求,必须将http.get函数合并到回调函数中。否则,该过程将无法完成并将提前结束,使用回调允许http请求完成(有或没有错误),然后继续执行其余功能。
WiseGuySkill.prototype.eventHandlers.onLaunch = function (launchRequest, session, response) {
// Call requestFunction to make the http.get call.
// Get response from requestFunction using requestCallback
requestFunction(function requestCallback(err) {
// If error occurs during http.get request - respond with console.log
if (err) {
console.log('HTTP Error: request not sent');
}
ContinueIntent(session,response);
});
};
功能' requestFunction'调用http.get并触发回调。
function requestFunction(requestCallback){
var url = "http://www.google.com";
http.get(url, function(res) {
console.log("Got response: " + res.statusCode);
requestCallback(null);
}).on('error', function (e) {
console.log("Got error: ", e);
});
}
显然确保您需要' http'在脚本的开头。 希望这可以帮助其他任何新手!