Оператор возврата, присутствующий внутри функции then () объекта обещания, не возвращающей значения симулятору alexa, но работающей вне .then () - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь получить значения из mongo db и заполнить полученные значения в ответе симулятора alexa.

Используемая версия alexa sdk является последней версией v2.0, ask-sdk.

Тестирование проводилось как с использованием alexa-skill-local, так и с использованием лямбда-функции.

Приведенный ниже оператор возврата работает, как и ожидалось

return handlerInput.responseBuilder
                    .speak("test")
                    .reprompt("test")
                    .withSimpleCard('Innovation details', "test")
                    .getResponse();

Результат сприведенный выше оператор возврата показан ниже

{
"body": {
    "version": "1.0",
    "response": {
        "outputSpeech": {
            "type": "SSML",
            "ssml": "<speak>test</speak>"
        },
        "card": {
            "type": "Simple",
            "title": "Innovation details",
            "content": "test"
        },
        "reprompt": {
            "outputSpeech": {
                "type": "SSML",
                "ssml": "<speak>test</speak>"
            }
        },
        "shouldEndSession": false
    },
    "sessionAttributes": {},
    "userAgent": "ask-node/2.3.0 Node/v8.12.0"
}

}

Я написал функцию ops (), которая будет извлекать значения из mongodb, размещенного в облачном атласе.Полученная строка будет использоваться в качестве речевого текста и повторного текста.Но так как javascript асинхронный, и в него вовлечены вызовы mongoose, я попытался написать функции async / await, а также функции обратного вызова и, наконец, обещать функции для возврата значения db.Вызовы db находятся внутри объекта обещания, а оператор return находится внутри .then (), как показано ниже.Операторы консоли заполняют правильные результаты в консоли при запуске с использованием alexa-skill-local, и об ошибке не сообщается в консоли.Запуск через лямбда-функцию также не приводит к ошибкам.

ops(handlerInput).then(function(data){
                console.log("in promise then "+data.speechText);
                var handlerInput=data.input;
                return handlerInput.responseBuilder
                    .speak(data.speechText)
                    .reprompt(data.speechText)
                    .withSimpleCard('Innovation details', data.speechText)
                    .getResponse();
            }) .catch(error => console.log(error));

Переданный объект разрешения:

var passer={
                            "input": handlerInput,
                            "speechText":speechText
           };

При использовании alexa-skill-local операторы консоли работают должным образомно оператор return не возвращает значение симулятору alexa.Возвращается JSON как

{
"body": {
    "version": "1.0",
    "response": {},
    "sessionAttributes": {},
    "userAgent": "ask-node/2.3.0 Node/v8.12.0"
}

}

Пожалуйста, помогите мне вернуть значения в симулятор alexa

1 Ответ

0 голосов
/ 24 декабря 2018

Спасибо за ваши ответы.Ответы помогли мне найти решение.

Я поставил возврат перед объектом обещания.Теперь обработчик намерений возвращает объект обещания.

...