Я пытаюсь создать простой клиент node.js с использованием библиотеки amqp, которая открывает одно соединение, а затем один канал к серверу RabbitMQ. Я хочу повторно использовать одно и то же соединение и канал для отправки нескольких сообщений. Основная проблема в том, что я не хочу писать весь свой код внутри функции обратного вызова функции ceateChannel ().
Как повторно использовать канал вне функции обратного вызова и убедиться, что функция обратного вызова завершена, прежде чем использовать канал?
Я пробовал и способ обратного вызова, и способ обещания, но я не могу заставить ни один из них работать. При использовании метода обратного вызова я сталкиваюсь с описанной проблемой.
При использовании обещаний у меня проблема в том, что я не могу сохранить ссылку на соединение и канал вне функции .then (), потому что переданные переменные уничтожаются после настройки соединения и канала.
amqp.connect('amqp://localhost', (err, conn) => {
if (err !== null) return console.warn(err);
console.log('Created connection!');
conn.createChannel((err, ch) => {
if (err !== null) return console.warn(err);
console.log('Created channel!');
//this is where I would need to write the code that uses the variable "ch"
//but I want to move the code outside of this structure, while making sure
//this callback completes before I try using "ch"
});
});
amqp.connect('amqp://localhost').then((conn) => {
return conn.createChannel();
}).then((ch) => {
this.channel = ch;
return ch.assertQueue('', {}).then((ok) => {
return this.queueName = ok.queue;
});
}).catch(console.warn);