so bin ich ziemlich neu zu node.js und Javascript im Allgemeinen. Ich habe versucht, eine Alexa-Smarthome-Fähigkeit zu schreiben, die mein Licht anschaltet. Ich host meine Node.js-Funktion in der Amazon-Cloud mit Lambda. Alexa ruft diese Funktion auf und übergibt ein event
und context
Objekt und ein callback
Ich sollte verwenden, um das Ergebnis festzulegen. Wenn jedoch die "main" -Funktion ihre Ausführung beendet, bevor der Callback gesetzt ist, funktioniert sie nicht und das Ergebnis ist "null". Um es zum Laufen zu bringen, denke ich, dass ich irgendwie warten muss, bis die Webanfrage abgeschlossen ist, bevor die "Haupt" -Funktion beendet wird. Ich habe meinen aktuellen Code (abgeschnitten) angehängt, damit Sie hoffentlich herausfinden können, was ich meine, und mir eine Lösung dafür vorschlagen. Vielen Dank!AWS node.js warte auf Funktion
EDIT VERGASS CODE ^^
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);
};