Веб-сокеты API Gateway - функция отправляет два сообщения - PullRequest
0 голосов
/ 30 октября 2019

Я использую серверные веб-сокеты apigateway и могу успешно получать сообщения, отправляемые назад и вперед между лямбда-функцией и клиентом.

Однако я не могу понять, как заставить мою функцию отправлять только одно сообщение. В настоящее время он отправляет два сообщения из-за обратного вызова в конце функции. Это в большей степени проблема nodejs, но последние пару часов я пытался выяснить, как, но, похоже, не могу.

 var params2 = {
        TableName: "UserConnections",
        FilterExpression: "cameraId = :val",
        ExpressionAttributeValues: { ":val": {"S" : JSON.parse(event.body).data.camera_id}}
    };


    DDB.scan(params2, function(err, data) {
       if (err) throw err; 
       console.log("DATA: " + JSON.stringify(data));

       for(var i = 0; i<data['Items'].length; i++){
           var id = data['Items'][i]['connectionId'].S;
           console.log("List of connection ids: " + id);


            var params3 = {
              ConnectionId: id,
              Data: JSON.stringify(message)
            };

            apigatewaymanagementapi.postToConnection(params3, function(err, data) {
              if (err){
                  throw err; // an error occurred
              }else{
                  console.log("Success sending message to clients: " + JSON.stringify(data)); 
              }
            }); 
       }
    });



    callback(null, {
         statusCode: 200,
         body: "Message Processed in Lambda!"
    });

В методе postToConnection он отправляет сообщение обратнодля нескольких пользователей, и функция обратного вызова отправляет тело тем же пользователям. Как я могу просто отправить params3 обратно пользователям и не использовать обратный вызов для завершения функции

Edit1: ______________________________________________

enter image description here

Добавление

 callback(null, {});

Тем не менее отправляет два сообщения, за исключением того, что второе теперь пусто. Как я могу заставить его строго отправлять только одно сообщение

1 Ответ

1 голос
/ 30 октября 2019

Возвращается с объектом empty, возвращаемое значение игнорируется, когда эта функция вызывается из шлюза WebSocket

    return {}; // callback(null, {});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...