簡體   English   中英

在Alexa響應中使用Dynasty DynamoDB查詢

[英]Use Dynasty DynamoDB Query in Alexa Response

我在運行於AWS Lambda的Nodejs Alexa Skill Service中使用了Dynasty ,以查詢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();
    }
};

用於NodeJS v2的Alexa SDK支持處理程序中的promise

因此,從您的處理程序中,您會返回一個Dynasty承諾,該承諾與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(..)
                }
            });
        });
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM