Проблема с async/await
Запутался с асинхронностью js. У меня есть функция, getMessage() которая обходит все письма на email, по необходимому параметру находит нужное письмо
let imaps = require('imap-simple');
const simpleParser = require('mailparser').simpleParser;
const _ = require('lodash');
let config = {
imap: {
user: '[email protected]',
password: 'pass',
host: 'imap.rambler.ru',
port: 993,
tls: true,
authTimeout: 3000
}
};
async function getMessage() {
let current_message = {};
let connection = await imaps.connect(config);
await connection.openBox('INBOX');
let searchCriteria = ['1:50'];
let fetchOptions = {
bodies: ['HEADER', 'TEXT', ''],
};
let messages = await connection.search(searchCriteria, fetchOptions);
await messages.forEach(function (item) {
let all = _.find(item.parts, { "which": "" })
let id = item.attributes.uid;
let idHeader = "Imap-Id: "+id+"\r\n";
simpleParser(idHeader+all.body, (err, mail) => {
// access to the whole mail object
if (mail.subject.indexOf('Facebook') > -1) {
console.log('Необходимое сообщение найдено: ' + mail.subject);
current_message = mail;
}else {
console.log(mail.subject);
}
});
});
await connection.end();
return current_message;
}
async function main(){
let result = await getMessage();
console.log(result);
}
main();
Изначально функция была из цепочки Promise.then, переписал на async/await. Самое главное я ожидал, что в цикле я получу объект необходимого письма и запишу его в current_message, а после завершения работы верну current_message. Но по какой-то причине return не ставится в очередь и отрабатывает сразу, мой код сначала возвращает пустой объект, а уже после выполняет остальной код.
Заранее огромное спасибо за помощь!