您是否可以使用由node.js 8.10支持的AWS Lambda函数向SNS主题发布多条消息?

时间:2018-06-01 13:18:48

标签: node.js aws-lambda amazon-sns

有关如何发布单个邮件的相关问题:Can you publish a message to an SNS topic using an AWS Lambda function backed by node.js?

但是,我的问题与发布多条消息有关。 我正在使用节点8.10,我的处理程序是异步的。

2 个答案:

答案 0 :(得分:0)

相关问题使用context.done,它会在进行第二次调用之前结束lambda。使用

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,嵌套调用或让它们以异步方式进行取决于您。

答案 1 :(得分:0)

您可以使用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);
        }
    });
  });
}
  1. 并行创建和发送通知:

// 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将在所有消息发布(成功或不成功)之后被调用