Почему AWS Lambda объединяет слоты типа AMAZON.NUMBER при добавлении? - PullRequest
0 голосов
/ 26 апреля 2018

Я изучаю Alexa & AWS Lambda и пытаюсь определить, почему, когда слот типа AMAZON.NUMBER добавляется к другому номеру (в моем случае, к атрибуту), числа идут непосредственно вместе, как будто их объединяют, а не чем добавил?

'CountSeveralTimes': function(){
  var count = this.event.request.intent.slots.count.value;
  this.attributes['currentCount'] = this.attributes['currentCount'] + count;
  this.response.speak("Nice Job! You have now counted " + 
  this.attributes['currentCount']+ " times.").listen();
  this.emit(':responseReady');
},

Скажем, я выполнил вышеуказанный фрагмент кода со значением "count", имеющим тип слота AMAZON.NUMBER, равным 10, и currentCount, равным 10. Вместо добавления 10 + 10 для оценки 20, это вместо этого возвращает «Хорошая работа! Вы насчитали 1010 раз». Я попытался отладить, поместив случайное число между их добавлением, чтобы увидеть, какое из них добавляется неправильно. Атрибут (currentCount) добавляется правильно, но все, что не имеет переменная count из слота.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 27 апреля 2018

Это проблема JavaScript. this.event.request.intent.slots.count.value имеет тип string вместо number, как вы могли подумать. Это означает, что выражение this.attributes['currentCount'] + count имеет , а не форму number + number, что приведет к тому, что знак плюс будет действовать как оператор арифметического сложения, что вам и нужно.

Чтобы исправить это, явно приведите тип операндов:

 this.attributes['currentCount'] = Number( this.attributes['currentCount'] ) +
 Number( count );
...