最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

awl lambda中的“ ERROR unhandled Promise Rejection”是否会成为问题?

运维笔记admin10浏览0评论

awl lambda中的“ ERROR unhandled Promise Rejection”是否会成为问题?

awl lambda中的“ ERROR unhandled Promise Rejection”是否会成为问题?

无论如何这会破坏要素所属的流程吗?

我有一个在API网关websocket端点后面工作的lambda。

这只是询问一个clientId和一个消息有效负载,查询该yndamo上的所有连接以获取该clientId(多设备实时仪表板前端),并更新所有感兴趣的用户。

[如果您在命令行上测试了变形的“ wscat”效果很好,但在使用js websocket api或c#websocket api的真实世界浏览器中,它是有问题的。

难道这除了与它有关系吗?

const AWS = require("aws-sdk");
let dynamo = new AWS.DynamoDB.DocumentClient();

require("aws-sdk/clients/apigatewaymanagementapi");

const ORDERS_TABLE = "ordersTable";

const successfullResponse = {
  statusCode: 200,
  body: "everything is alright"
};

module.exports.sendMessageHandler = (event, context, callback) => {
  console.log(event);
  sendMessageToAllConnectedClientDevices(event)
    .then(data => {
      console.log("sucesso", data);
      callback(null, successfullResponse);
    })
    .catch(err => {
      console.log("erro: ", err);
      callback(null, JSON.stringify(err));
    });
};

const sendMessageToAllConnectedClientDevices = async event => {
  try {
    const body = JSON.parse(event.body);
    const { clientId } = body;
    console.log(
      "handler.sendMessageToAllConnectedClientDevices.clientId: ",
      clientId
    );

    const connectionIds = await getConnectionIds(clientId);

    return await Promise.all(
      connectionIds.Items.map(connectionId => {
        send(event, connectionId.connectionId);
      })
    );
  } catch (error) {
    console.log("erro sendMessageToAllConnectedClientDevices");
    return error;
  }
};

const getConnectionIds = async clientId => {
  console.log("handler.getConnectionIds.clientId: ", clientId);

  const params = {
    TableName: ORDERS_TABLE,
    // IndexName: "client_gsi",
    FilterExpression: "clientId = :cliend_id",
    // KeyConditionExpression: "clientId = :cliend_id",
    ProjectionExpression: "connectionId",
    ExpressionAttributeValues: {
      ":cliend_id": clientId
    }
  };

  console.log("handler.getConnectionIds.params: ", JSON.stringify(params));

  const data = await dynamo.scan(params).promise();
  return data;
};

const send = async (event, connectionId) => {
  const body = JSON.parse(event.body);
  const postData = body.data;

  const endpoint =
    event.requestContext.domainName + "/" + event.requestContext.stage;
  const apigwManagementApi = new AWS.ApiGatewayManagementApi({
    apiVersion: "2018-11-29",
    endpoint: endpoint
  });

  const params = {
    ConnectionId: connectionId,
    Data: postData
  };

  return await apigwManagementApi.postToConnection(params).promise();
};

错误未处理的承诺被拒绝

回答如下:

我认为问题在于API网关,请检查您如何处理传递给Lambda函数的信息(因为与命令行调用相比,浏览器会发送一些额外的信息)

发布评论

评论列表(0)

  1. 暂无评论