Ich entwickle eine Fakten-Fähigkeit für Alexa mit ihrer SpaceGeek-Vorlage. Die Vorlage selbst ist sehr geradlinig, aber ich versuche, es durch zu verbessern, um sicherzustellen, dass die verwendeten Fakten in derselben Sitzung nicht wieder auftauchen. Also ich löschen Sie das Element, nachdem es verwendet wird. Nun kommt es jedoch zu dem Problem, dass die in der Sitzung gelöschten Elemente in zukünftigen Sitzungen nicht mehr auftauchen. Also ich nehme an, dass die globale Variable im Backend bleibt und somit ein Kopier-Array wie unten erstellt. Aber es wird immer noch nicht funktionieren. Nachdem ich alle Fakten einmal verwendet habe, werde ich immer "Das sind alle Fakten, die wir für jetzt haben" bekommen. Selbst wenn ich eine neue Sitzung starte. Jede Hilfe wird geschätzt.Wie verwendet man sitzungsspezifische Variablen in Alexa Skills?
function handleNewFactRequest(response) {
var COPY_FACTS= SOME_FACTS.splice(0);
if(COPY_FACTS.length>0){
var factIndex = Math.floor(Math.random() * COPY_FACTS.length);
var fact = COPY_FACTS[factIndex];
// Create speech output
var speechOutput = "Here's your random fact: " + fact + " would you like more?";
var repromptOutput = "would you like more random facts?";
COPY_FACTS.splice(factIndex, 1);
response.ask(speechOutput, repromptOutput);
}else{
var speechOutput = "That's all the facts we have for now.";
response.tell(speechOutput);
}
}
Dies funktioniert sogar schlechter als der OP-Code - da der Aufruf von 'splice()' keiner Variablen zugewiesen wird, würde das Ändern zu Aufruf von 'slice() 'dazu führen, dass er eine Kopie des Array mit entferntem Element, das sofort verlassen würde. –
Mein Kommentar wurde nur auf die Codezeile gerichtet, die speziell 'splice (0)' verwendet, die 'var COPY_FACTS = SOME_FACTS.splice (0) war;' Diese Zeile in 'var COPY_FACTS = SOME_FACTS.slice() ändern;' würde Lösen Sie das Problem, dass das ursprüngliche Fakt-Array 'SOME_FACTS' leer wird. Ich hätte klarer sein sollen, – GregI
Das ist fair, aber das würde in keiner Weise dazu führen, dass die entfernten Fragen zwischen den Antworten bestehen bleiben. Es löst das halbe Problem, aber nicht wirklich die wichtige Hälfte. –