С учетом следующего:
channel.consume(queue, msg => { ... });
Ваше ожидание, указанное ниже,
Я ожидаю, что код будет печатать messageString вне потребляемой части console.log (messageString);
- неудачное ожидание. Приведенный выше код выполняет обратный вызов в функции arrow для каждого полученного сообщения. Стрелка унаследует область от родительского контекста, но вы не можете пойти в другом направлении. Таким образом, происходят две вещи:
- Вызывается Consume и
- Строка 'undefined' регистрируется на вашей консоли. Это связано с тем, что следующая строка для запуска НЕ находится внутри лямбда-выражения, а скорее является
console.log(messageString)
, который в то время не определен.
Вместо этого вам необходимо переместить оператор console.log
ВНУТРИфункция стрелки. Если вам нужна какая-то другая функция для запуска в родительской области (я полагаю, это то, что вам нужно), вам придется определить ее как отдельную функцию и вызвать ее из функции стрелки.
Например,:
let consumerTag = channel.consume(queue, msg => {
console.log('Message received: ...');
var messageString = msg.content.toString();
this.doSomethingUsefulWith(messageString);
console.log('Acknowledging message..');
channel.ack(msg);
});
function doSomethingUsefulWith(messageString) { ... }