Alexa Lambda DynamoDB ничего не возвращает - PullRequest
0 голосов
/ 13 сентября 2018

Я не могу понять, почему я не вижу ответа DynamoDB в моем навыке Alexa.

Я создал несколько вариантов обещания с DynamoDB из разных источников, чтобы выяснить это. Но, похоже, ничего не работает. В журналах нет ни одной ошибки DynamoDB. Это сводит меня с ума.

Я пробовал сканировать, получать и помещать операции.

Вот код моего сканирования, попробуйте в AWS lambda:

....

'StartIntent': function () {
    speechOutput = '';

    var AWS = require('aws-sdk');
    AWS.config.update({region: 'eu-west-1'});

    var docClient = new AWS.DynamoDB.DocumentClient();

    var params = {
        TableName: "my_db_2",
        FilterExpression: "data_type = card"
    };

    console.log("Scanning table.");

    docClient.scan(params, onScan).promise().then(function(result)  {
        console.log("GetItem succeeded:", JSON.stringify(result, null, 2));
        console.log("succeeded");
        }).catch(error => {
    console.log("ERROR catched");
    });
    console.log("scan done");

},

.....


function onScan(err, data) {
    console.log("starting to scan");
    if (err) {
        console.error("Unable to scan the table. Error JSON:", 
        JSON.stringify(err, null, 2));
    } 
    else {
        console.log("Scan succeeded.");
        data.Items.forEach(function(movie) {
           console.log(movie.data_type);
        });
    }
}

Cloudwatch показывает только:

2018-09-13T11: 43: 11.500Z Таблица сканирования.

2018-09-13T11: 43: 11,522Z сканирование выполнено

2018-09-13T11: 43: сканирование 11,659Z 2-го выполнено

1 Ответ

0 голосов
/ 14 сентября 2018

scan не является синхронным.Вы используете обещание для инкапсуляции асинхронного поведения.В основном console.log("Scanning table.") и console.log("scan done") будут вызваны немедленно, потому что они являются частью одного и того же синхронного блока.Затем, когда операция scan завершится, будет вызван console.log("succeeded").Поскольку вы, кажется, не ожидаете завершения сканирования, я предполагаю, что ваша лямбда завершает работу, прежде чем вы вернете свои данные из DynamoDB.

...