【发布时间】:2020-03-16 00:25:38
【问题描述】:
我正在努力使用一个简单的 AWS Lambda 函数,该函数应该将一些消息发布到 SNS 主题。
我的邮箱订阅了该主题,并且订阅已确认。
主题与我的 lambda 函数位于同一区域。
该函数与附加了两个策略的 IAM 角色相关联:
- 默认策略 AWSLambdaBasicExecutionRole
- 另一个允许函数写入我的 SNS 主题的策略
政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:eu-west-1:XXXXXXXXXXXX:YYYYYYYYYYYYYYYYYYY"
}
]
}
这是我在 Cloud9 上开发的功能代码。
const AWS = require("aws-sdk");
const sns = new AWS.SNS({region:'eu-west-1'});
exports.handler = async (event, context, callback) => {
const apiResponse = new Promise((resolve, reject) => {
setTimeout(() => resolve(['one', 'two', 'three']), 500)
});
const messages = await apiResponse;
const promises = [];
messages.forEach(txt => {
promises.push(sns.publish({
Message: txt,
Subject: txt,
TopicArn: 'arn:aws:sns:eu-west-1:xxxxxxxxxxxx:MyWebsiteContactForm'
}).promise());
});
console.log(promises);
Promise.all(promises,
function (values) {
console.log(values);
callback(null, values);
},
function(err) {
console.error(Error(err));
callback(Error(err));
}
);
};
执行这段代码的结果就是这个预期的输出,但它不会在Promise.all() 中记录任何内容。
[ Promise { <pending> },
Promise { <pending> },
Promise { <pending> } ]
这就像 Lambda 在解决承诺之前终止,但我不知道为什么。我按照here的建议使用了Promise.all()
提前致谢
【问题讨论】:
-
投票结束,因为这是 StackOverflow 上 99999 个问题的副本。示例:stackoverflow.com/questions/31633912/…、stackoverflow.com/questions/54143931/…、stackoverflow.com/questions/50563173/…
标签: javascript amazon-web-services promise aws-lambda