AWS Node.js等待功能



所以我对node.js和javascript一般都是新手。我一直在努力编写一项Alexa Smarthome技能,该技能转向我的光线。我使用lambda在Amazon AWS Cloud中托管我的Node.js函数。Alexa称此功能传递了eventcontext对象,而callback我应该用来设置结果。但是,如果"主"函数在设置回调之前完成执行,则结果不起作用,结果为" null"。因此,为了使它起作用,我认为我需要以某种方式等待WebRequest完成,然后才能结束"主"功能。我附上了当前的代码(截断),因此您希望您能弄清楚我的意思,并建议我解决这个问题。谢谢!

编辑忘记代码^^

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);
};

在代码是一个符号之前,您需要在配置中的提前设置下增加lambda函数的超时设置。

确保您将超时设置超过期望功能加载,运行代码和Web请求的长度。我认为默认值是10秒,可能对您来说还不够。

希望它有帮助

最新更新