【问题标题】:HelloWorld Alexa Skill - where does it start executing?HelloWorld Alexa Skill - 它从哪里开始执行?
【发布时间】:2017-02-07 23:34:17
【问题描述】:

我正在学习 javascript 和构建 Alexa Skill 的基础知识。亚马逊提供了一个简单的 HelloWorld Alexa 技能,可以在这里找到:https://github.com/amzn/alexa-skills-kit-js/blob/master/samples/helloWorld/src/index.js

我有两个关于这个函数的问题。

// Create the handler that responds to the Alexa Request.
exports.handler = function (event, context) {
    // Create an instance of the HelloWorld skill.
    var helloWorld = new HelloWorld();
    helloWorld.execute(event, context);
};
  1. 当用户启动 Alexa Skill 时,代码的执行是从这里开始的吗?在我看来,这是创建 HelloWorld 对象并启动用户想要的意图的代码部分。
  2. 每次用户调用意图时都会执行此部分吗?例如,如果我在这个 Alexa Skill 中两次询问 Alexa“帮助”,这个代码块会被调用两次吗?我来自 Java,那里有一个 main 方法,但仍然掌握了 javascript。

【问题讨论】:

    标签: javascript alexa-skills-kit alexa-skill


    【解决方案1】:

    是的,分配给exports.handler 的函数大致相当于Java 主程序。每次调用技能都会执行这个函数里面的代码。

    它之外的代码也会运行,但仅在 Lambda 首次初始化时才会运行,这种情况很少发生,除非您的技能使用量非常非常大。在下面的例子中:

    var globalCount = 0;
    exports.handler = function (event, context) {
        var localCount = 0;
        // Create an instance of the HelloWorld skill.
        var helloWorld = new HelloWorld();
        helloWorld.execute(event, context);
        console.log("GlobalCount: " + globalCount + " LocalCount: " + localCount);
        localCount++;
        globalCount++;
    };
    

    您会看到 globalCount 会随着每次调用技能而不断增加 - 这意味着只有函数代码被调用。同时,localCount 每次都会重新初始化。因此,输出将是:

    GlobalCount: 0 LocalCount: 0
    GlobalCount: 1 LocalCount: 0
    GlobalCount: 2 LocalCount: 0
    

    希望能澄清事情!

    【讨论】:

    • 您无意中解决了我的 math.random() 函数为何卡住的谜团。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2018-02-01
    • 1970-01-01
    相关资源
    最近更新 更多