, поэтому я использую RabbitMQ для некоторых проектов, и я заметил, что все время буду использовать некоторый дублирующий код, поэтому я решил создать класс или интерфейс Wrapper, которые имеют некоторую функцию для непосредственного использования RabbitMQ без повторения кода всевремя.я начал делать это вчера, и у меня уже были некоторые проблемы, так как я хотел использовать ООП, и Javascript может быть сложным при использовании ООП (по крайней мере, я так думаю)
Я начал с создания класса IRAbbitMQ с функцией init дляинициализировать соединение и создать канал, я знал, что не могу использовать вложенные классы, поэтому вместо этого я хотел использовать функции Factory, я пытался сделать соединение и канал частью свойств класса IRabbitMQ, но я не знаю, почему это дало мне неопределенное значение, когдая создаю его экземпляр
class IRabbitMQ {
constructor() {
this.init(rabbitMQServer); // rabbitMQServer for example 'localhost//5672'
}
// establish a Connection to RAbbitMQ Server
async init(host) {
try {
let connection = await amqplib.connect(host);
let channel = await connection.createChannel();
channel.prefetch(1);
console.log(' [x] Awaiting RPC requests');
this.connection = connection;
this.channel = channel;
}
catch(err) {
console.error(err);
}
}
// Close the Connection with RabbitMQ
closeConnection() {
this.connection.close();
}
log() {
console.log(this.connection);
}
EventPublisher() {
function init(IRabbit, publisherName) {
if(!IRabbit.connection) {
throw new Error('Create an Instance of IRabbitMQ to establish a Connection');
}
let ch = IRabbit.channel;
console.log(ch);
}
return {
init : init
}
}
}
var r = new IRabbitMQ();
r.log();
когда я запускаю код, вывод не определен, я не знаю почему, так как я инициализирую свойства соединения и канала в функции init, а затем вызываю эту функцию в конструкторе такэто должно быть инициализировано, когда я создаю объект класса Wrapper.Я также хотел бы получить от вас несколько советов, лучше ли использовать классы или есть какой-либо другой лучший способ создать класс Wrapper или интерфейс для RabbitMQ, чтобы было проще использовать его и не дублировать код.