有关如何发布单个邮件的相关问题:Can you publish a message to an SNS topic using an AWS Lambda function backed by node.js?
但是,我的问题与发布多条消息有关。 我正在使用节点8.10,我的处理程序是异步的。
答案 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的多次调用。
。
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
将在所有消息发布(成功或不成功)之后被调用