【问题标题】:Use Dynasty DynamoDB Query in Alexa Response在 Alexa 响应中使用 Dynasty DynamoDB 查询
【发布时间】:2018-05-22 13:51:49
【问题描述】:

我在我的 Nodejs Alexa 技能服务中使用 Dynasty,在 AWS Lambda 上运行,来查询 DynamoDB。由于 API 的结构,我无法在我的 Alexa 响应中使用查询结果。在下面的代码中,传递给“then”的回调在处理程序返回后运行,因此永远不会分配“name”。如何在响应中使用查询回调中获得的信息?

const dynasty = require('dynasty')(credentials);

const myIntentHandler = {
    canHandle(input) {
        return input.requestEnvelope.request.intent.name === 'MyIntent';
    },
    handle(input) {
        const userId = input.requestEnvelope.session.user.userId;
        const users = dynasty.table('user');
        var name;
        users.find(userId).then(function(user) {
            if(user) {
                name = user.name;
            } else {
                ...
            }
        });
        return input.responseBuilder.speak('Hello ' + name).getResponse();
    }
};

【问题讨论】:

  • 返回 if 块内?另外,希望我知道王朝...用 DynamoDB 查询是如此冗长

标签: node.js amazon-dynamodb alexa dynastyjs


【解决方案1】:

适用于 NodeJS v2 的 Alexa SDK 支持 promises in handlers

所以,从你的处理程序中,你返回一个承诺,链接到 Dynasty 查询承诺。

const dynasty = require('dynasty')(credentials);

const myIntentHandler = {
    canHandle(input) {
        return input.requestEnvelope.request.intent.name === 'MyIntent';
    },
    handle(input) {
        const userId = input.requestEnvelope.session.user.userId;
        const users = dynasty.table('user');
        var name;
        return new Promise((resolve, reject) => {
            users.find(userId).then(function(user) {
                if(user) {
                    name = user.name;
                    let response 
                        = input.responseBuilder
                               .speak('Hello ' + name)
                               .getResponse();
                    resolve(response);
                } else {
                    ...
                    // handle this case
                    //  and resolve(..) or reject(..)
                }
            });
        });
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2019-04-07
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多