Как я могу отправлять сообщения в мою очередь и отправлять запрос? - PullRequest
0 голосов
/ 05 июня 2019

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

Я пытался одновременно отправить сообщение и сделать почтовый запрос, но в данный момент работает только почтовый запрос

Вот как выглядит мой код

const params = {
    "TableName": "sites",
    "Item": {
      userId: event.requestContext.identity.cognitoIdentityId,
      siteId: siteIdFinal,
      ...data,
      createdAt: Date.now()
    }
  };

  const messageParams = {
    MessageBody: 'Waddup fam',
    QueueUrl: ' https://sqs.eu-west-1.amazonaws.com/106845550704/MyQueue'
  };


  try {
    await dynamoDbLib.call("put", params);
    sqs.sendMessage(messageParams, (err, data) => {
      if (err) {
        console.log("Error: "+err);
      } else {
        console.log("Success: "+data.MessageId);
      }
    });

    return success(params.Item);
  } catch (e) {
    console.log(e);
    return failure({ status: false });
  }

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

1 Ответ

0 голосов
/ 05 июня 2019

Ваша асинхронная функция возвращает params.Item до того, как sendMessage выполнит обратный вызов.Используйте обещание, чтобы убедиться, что оба метода завершены правильно

await sqs.sendMessage(messageParams).promise()
    .then(function(data) {
        console.log("Success: "+data.MessageId);
    }).catch(function(err) {
        console.log("Error: "+err);
  });

Подробнее о aws-sdk и обещаниях: https://aws.amazon.com/blogs/developer/support-for-promises-in-the-sdk/

...