Можете ли вы опубликовать несколько сообщений в теме SNS, используя функцию AWS Lambda, поддерживаемую node.js 8.10? - PullRequest
0 голосов
/ 01 июня 2018

Существует вопрос, связанный с тем, как опубликовать одно сообщение: Можете ли вы опубликовать сообщение в теме SNS с помощью функции AWS Lambda, поддерживаемой node.js?

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

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Вы можете использовать функцию Promise.all () для инкапсуляции нескольких вызовов в sns.publish.

  1. Создать функцию публикации с одним уведомлением, которая возвращает Promise:

.

function onePublishPromise(notificationParams){ 
  return new Promise((resolve, reject) => {
    sns.publish(notificationParams, function(err, data) {
        if (err) {
            console.error("Unable to send notification message. Error JSON:", JSON.stringify(err, null, 2));
            reject(err);
        } else {
            console.log("Results from sending notification message: ", JSON.stringify(data, null, 2));
            resolve(null);
        }
    });
  });
}
Создание и отправка уведомлений параллельно:

// Create notifications params const notifications = [ {

    Subject: 'A new notification',
    Message: 'Some message',
    TopicArn: 'arn:aws:sns:us-west-1:000000000:SomeTopic'

   }
   // , ...
];
// Send all notifications
const notificationsDelivery = notifications.map(onePublishPromise);
// Wait for delivery results
Promise.all(notificationsDelivery).then(callback).catch(callback);

callback будет вызываться после всех опубликованных сообщений (успешно или нет)

0 голосов
/ 01 июня 2018

В связанном вопросе используется context.done, который завершит лямбду перед вторым вызовом.Используя

sns.publish(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

, вы можете совершать больше звонков, например,

sns.publish(params2, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

Если вы хотите использовать async.waterfall, вкладывать вызовы или выполнять их асинхронно, решать вам.

...