2017-09-27 3 views
0

J'ai une fonction de nombre aléatoire dans ma compétence Alexa qui utilise le type d'emplacement AMAZON.NUMBER, schéma d'intention montré ci-dessous.Javascript La fonction Alexa retourne [objet objet] lors de la saisie de l'utilisateur

"slots": [ 
     { 
      "name": "NumOne", 
      "type": "AMAZON.NUMBER" 
     }, 
     { 
      "name": "NumTwo", 
      "type": "AMAZON.NUMBER" 
     } 
     ], 

je reçois les chiffres que l'utilisateur souhaite utiliser et de les mettre en Num1 et Num2 respectivement, comme indiqué dans ma fonction ci-dessous.

var Num1 = this.event.request.intent.slots.NumOne; 
    var Num2 = this.event.request.intent.slots.NumTwo; 

    var result = Math.floor(Math.random() * (Num2 - Num1) + Num1); 

    // Create speech output 
    //var speechOutput = "The random number is: " + result; 
    var speechOutput = Num1 + Num2; 
    var cardTitle = "Random Number between " + Num1 + "and " + Num2; 
    //response.tellWithCard(speechOutput, cardTitle, speechOutput); 
    this.emit(':tell', speechOutput, cardTitle, speechOutput); 

Cependant lorsque j'imprime Num1 et Num2 ils ont tous deux apparaissent comme [objet Object] ce qui signifie que je ne peux pas faire des calculs avec eux que le résultat sera toujours NaN. Y a-t-il un moyen de résoudre ce problème afin que Num1 et Num2 aient des valeurs numériques?

+0

Vous ne pouvez pas convertir un objet en nombre. Vous devrez voir si ces objets contiennent des nombres et les extraire. En outre, slots est un tableau et vous semblez essayer d'y accéder par * nom *? Rien de tout cela n'a de sens ... –

+0

Veuillez ajouter un journal pour obtenir l'événement json et le partager. Avant de fournir une solution, vous voulez voir la structure Json. –

+0

la réponse devrait être ** this.emit (': tell', speechOutput) **, pas ce que vous avez écrit. –

Répondre

1

je l'ai laissé pendant un certain temps et avait une réflexion sur le problème et a constaté que tout ce que je devais faire était de changer

var Num1 = this.event.request.intent.slots.NumOne; 

à

var Num1 = this.event.request.intent.slots.NumOne.value; 

Ceci a obtenu la valeur de la fente et pas seulement le type de slot (qui est objet donc pourquoi l'objet Object a été renvoyé).