node.js - 无法发布到 SNS 主题,将 MessageId 设为未定义
问题描述
我有一个非常基本的代码片段来测试从 Node Lambda 向 SNS 发布消息:
exports.handler = async () => {
const AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-2'});
let result;
try {
result = await new AWS.SNS({apiVersion: '2010-03-31'}).publish({
TopicArn: 'arn:aws:sns:us-east-2:99999999999:MyTopic',
Message: 'Body of Message 1',
Subject: 'Message 1'
});
} catch (err) {
console.error('xxxxxxxx', err, err.stack);
throw err;
}
console.info('>>>>>> ' + result.MessageId);
}
但是,我在日志中反复得到的只是>>>>>> undefined
,当然,消息没有被发布(因为订阅的队列总是空的)。我可以确认 Lambda 函数具有相关权限。我究竟做错了什么?
解决方案
你没有转换publish
成一个承诺。这意味着这result = await
将无法按预期工作。
阅读我的旧答案以获得更多理解:How to use Async and Await with AWS SDK Javascript
TLDR;
result = await new AWS.SNS({apiVersion: '2010-03-31'}).publish({
TopicArn: 'arn:aws:sns:us-east-2:99999999999:MyTopic',
Message: 'Body of Message 1',
Subject: 'Message 1'
}).promise(); // !!!
推荐阅读
- php - 如何使用来自 daabase 的 jquery ajax 获取 html 表单字段的数据
- c - 创建一个填充随机唯一数字的数组
- firebase - 使用 FirebaseAuth 、 Firestore 和 Google 登录的 Flutter multidex 问题
- ios - 为什么默认情况下 Swift 中的属性是非原子的?
- javascript - 如何将多个子项链接到单个父项?
- reactjs - GQL 不会自动调用查询
- html - 在 div 上应用灰度,除了它的子元素之一
- laravel - 每次递增按钮单击后如何存储用户ID
- c# - 编译时的 C# 代码扩展/注入
- c++ - 尝试从 Visual Studios C++ 中的加密字符串输出解密字符串时出现逻辑错误