Return promise 对象的 then() 函数中存在的语句不向 alexa 模拟器返回值但在 .then() 外部工作

Return statement present inside then() function of promise object not returning values to alexa simulator but working when outside .then()

我正在尝试从 mongo 数据库获取值并在 alexa 模拟器的回复中填充获取的值。

使用的alexa sdk版本是最新的v2.0,ask-sdk。

测试是通过使用 alexa-skill-local 和 lambda 函数完成的。

下面的 return 语句按预期工作

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

上面return语句的结果如下所示

{
"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 函数,回调地狱,最后承诺函数 return db 值。数据库调用在 promise 对象内部,return 语句在 .then() 内部,如下所示。当 运行 使用 alexa-skill-local 时,控制台语句在控制台中填充正确的结果,并且控制台中没有报告错误。 运行 通过 lambda 函数也不会产生任何错误。

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 模拟器的 returning 值。 returned JSON 为

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

}

请帮助我return将值发送到 alexa 模拟器

感谢您的回复。这些回复帮助我找到了解决方案。

我在promise对象前面放了一个return。现在意图处理程序是 returning promise 对象。