所以我对node.js和javascript很新。我一直在努力写一个alexa smarthome技能,它开启了我的光芒。我使用lambda在amazon aws云中托管我的Node.js函数。 Alexa调用此函数传递event
和context
对象以及callback
我应该用来设置结果。但是,如果“main”函数在设置回调之前完成其执行,则它不起作用,结果为“null”。因此,为了使其工作,我认为我需要等待webrequest完成,然后才能结束“main”功能。我附上了我当前的代码(截断),所以你可以找出我的意思并建议我解决这个问题。谢谢!
编辑FORGOT代码^^
process.env["PATH"] = process.env["PATH"] + ":" + process.env["LAMBDA_TASK_ROOT"];
const uuidV4 = require('uuid/v4');
var https = require('https');
var defaultRGB = {r: 100, g: 100, b: 100};
var handlers = {
"DiscoverAppliancesRequest": discoverAppliancesRequestHandler,
"TurnOnRequest": turnOnRequestHandler,
"TurnOffRequest": turnOffRequestHandler
};
function turnOnRequestHandler(event, context, callback) {
var header = buildHeader("TurnOnConfirmation", "Alexa.ConnectedHome.Control");
var body = {};
turnOnAllLights(function () {
callback(null, {header: header, payload: body});
});
}
function turnOnAllLights(callback) {
var options = {
host: "home.XXXX.de",
port: 9443,
path: "/XXX/update/V1",
method: "PUT",
headers: {
"Content-Type": "application/json"
}
};
var request = https.request(options, function (res) {
console.log(res.statusCode);
res.on("data", function (chunk) {
console.log(chunk);
callback();
}).on("error", function (error) {
console.error(error);
callback();
})
});
request.on("error", function (error) {
console.error(error);
});
request.write(JSON.stringify([defaultRGB.r, defaultRGB.g, defaultRGB.b]));
request.end();
}
function buildHeader(name, namespace) {
return {
messageId: uuidV4(),
name: name,
namespace: namespace,
payloadVersion: 2
};
}
exports.handler = function (event, context, callback) {
var name = event.header.name;
handlers[name](event, context, callback);
};
答案 0 :(得分:0)
在代码之前完成的功能通常是一个标志,您需要在配置中的高级设置下增加Lambda函数的超时设置。
确保将超时设置为您希望加载函数,运行代码和Web请求所需的时间长度。我认为默认值是10秒,这对你来说可能还不够。
希望有所帮助