【问题标题】:AWS node.js wait for functionAWS node.js 等待函数
【发布时间】:2018-08-20 18:54:37
【问题描述】:

所以总的来说,我对 node.js 和 javascript 还是很陌生。我一直在尝试编写一个打开我的灯的 alexa 智能家居技能。我使用 lambda 在亚马逊 AWS 云中托管我的 Node.js 函数。 Alexa 调用这个函数,传递一个 eventcontext 对象和一个 callback 我应该用来设置结果。但是,如果“main”函数在设置回调之前完成了它的执行,它就不起作用并且结果是“null”。因此,为了使其工作,我认为我需要以某种方式等待 webrequest 在结束“main”函数之前完成。我附上了我当前的代码(截断),这样你就可以理解我的意思并建议我解决这个问题。谢谢!

编辑忘记代码^^

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

【问题讨论】:

    标签: javascript node.js amazon-web-services aws-lambda alexa


    【解决方案1】:

    函数在您的代码之前完成通常表明您需要在配置中的高级设置下增加 Lambda 函数的超时设置。

    确保您设置的超时时间大于您期望函数加载、运行代码和 Web 请求所需的长度。我认为默认值为 10 秒,这对您来说可能不够。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 2020-08-01
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多