У меня есть служба, которая отправляет сообщения в очередь SQS, но для этого мне нужно получить URL-адрес очереди. Я делаю это с помощью Promises и асинхронных функций и с помощью функции SQS.getQueueUrl. Всякий раз, когда я вызываю функцию getQueueUrl, Promise всегда отклоняется. Я не уверен, где я иду не так.
Я получаю неразрешенные ошибки в обещаниях в журналах Cloudwatch. Чтобы исправить это, я использовал функции .then () и .catch () для регистрации отклонения или разрешения обещания. Всегда записывается, что Обещание было отклонено. После исправления неразрешенных ошибок в обещании, обещание все еще отклоняется.
Edit:
После добавления console.dir (err) в код, я получаю следующий вывод:
AWS.SimpleQueueService.NonExistentQueue: указанная очередь не существует или у вас нет к ней доступа.
Я еще раз посмотрю на мои настройки IAM и разрешения очереди.
const queueName = process.env.QUEUE_NAME
if (!queueName) {
throw new Error('QUEUE_NAME must be defined')
} else {
console.log(queueName)
}
const queuePromise = getQueueUrl()
queuePromise
.then(() => {
console.log('promise resolved')
})
.catch(() => {
console.log('promise rejected') //Always gets rejected
})
async function getQueueUrl() {
const queueUrl = (await SQS.getQueueUrl({ QueueName: queueName
}).promise())
.QueueUrl
console.log('Using queue URL')
return queueUrl
}
//Implementation
const url = await queuePromise //This is where getQueueUrl gets
called
Ожидаемый результат заключается в том, что функция getQueueUrl будет использовать AWS SDK для извлечения QueueUrl из SQS, если предоставляется имя очереди. Вместо этого Обещание отклоняется, а URL-адрес очереди не возвращается.