Лямбда-функция AWS срабатывает дважды, когда я нажимаю кнопку «Тест» - PullRequest
0 голосов
/ 06 ноября 2019

Я использую браузер Chrome, и когда я нажимаю кнопку «Тест» в верхней правой части экрана, лямбда-функция срабатывает 1-3 раза, и я не могу понять, почему это происходит.

Iпытался вставить параметры непосредственно в вызов DynamoDB.get, а также некоторое время гуглил и пытался найти кого-то с похожей проблемой. Я нашел некоторые из них, которые были близки, но ни одна из них не говорила об одной функции, запускаемой несколько раз при использовании встроенной кнопки тестирования. Я также пытался сделать вызов асинхронным и ждать его, но все безрезультатно.

// Import Libraries
const aws = require('aws-sdk');
const dynamoDB = new aws.DynamoDB.DocumentClient();

aws.config.update({
    region: "us-east-1"
});

// Get Document
exports.handler = async (event, context) => {
    let params = {
       TableName: event.TableName,
        Key: {
            uuid: event.uuid
        } 
    };  

    return await dynamoDB.get(params, function(error, data){
        if(error){
            console.error("Error", error);
        }
        else{
            console.log("Data: ", data);
        }
    }).promise();
};

Я бы ожидал, что функция будет вызываться только один раз, но чаще она печатает одну и ту же вещь 2-3 раза в Execution. Область результатов

Response:
{
  "Item": {
    "userId": "112",
    "uuid": "0118bb6f-e361-42a6-85e5-043091b69389"
  }
}

Request ID:
"4f5ce9da-bbf2-408b-9175-2759f45ba4fe"

Function Logs:
START RequestId: 4f5ce9da-bbf2-408b-9175-2759f45ba4fe Version: $LATEST
2019-11-06T01:46:01.361Z    4f5ce9da-bbf2-408b-9175-2759f45ba4fe    
INFO    Data:  { Item:
   {
       "userId": "112",
       "uuid": "0118bb6f-e361-42a6-85e5-043091b69389"
   } } 

2019-11-06T01:46:01.441Z    4f5ce9da-bbf2-408b-9175-2759f45ba4fe    
INFO    Data:  { Item:
   {
       "userId": "112",
       "uuid": "0118bb6f-e361-42a6-85e5-043091b69389"
   } } 
2019-11-06T01:46:01.461Z    4f5ce9da-bbf2-408b-9175-2759f45ba4fe    
INFO    Data:  { Item:
   {
       "userId": "112",
       "uuid": "0118bb6f-e361-42a6-85e5-043091b69389"
   } } 
END RequestId: 4f5ce9da-bbf2-408b-9175-2759f45ba4fe
REPORT RequestId: 4f5ce9da-bbf2-408b-9175-2759f45ba4fe  Duration: 127.68 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 95 MB  

1 Ответ

2 голосов
/ 06 ноября 2019

Вы предоставляете метод обратного вызова и , вы запрашиваете обещание в одном и том же вызове API.

Вы не должны делать и то, и другое. Я рекомендую удалить обратный вызов, например:

exports.handler = async (event, context) => {
    const params = {
       TableName: event.TableName,
        Key: {
            uuid: event.uuid
        } 
    };

    try {
        const data = await dynamoDB.get(params).promise();
        console.log("Data: ", data);
    } catch(error) {
        console.error("Error:", error);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...