Проблема с 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 не ставится в очередь и отрабатывает сразу, мой код сначала возвращает пустой объект, а уже после выполняет остальной код.

Заранее огромное спасибо за помощь!


Ответы (0 шт):