HelloWorld Alexa Skill - где он начинает выполняться?

Я изучаю javascript и основы создания навыков Alexa. Amazon предоставил простой навык 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? Мне кажется, что это часть кода, которая создает объект HelloWorld и запускает намерение, которое хочет пользователь.
  2. Выполняется ли эта часть каждый раз, когда пользователь вызывает намерение? Например, если бы я дважды попросил Алексу «помочь» в этом навыке Алекса, будет ли этот блок кода вызываться дважды? Я пришел с Java, где был основной метод, и все еще разбираюсь в javascript.

person Nishant    schedule 07.02.2017    source источник


Ответы (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

Надеюсь, это проясняет ситуацию!

person John Kelvie    schedule 07.02.2017
comment
Вы случайно раскрыли загадку, почему моя функция math.random () зависла. Ваше здоровье! - person brianfit; 12.02.2017