Я пытался исправить это в последние дни безуспешно. Я довольно новичок в ноде и асинхронной / син c концепции и, очевидно, мне чего-то не хватает.
Мне нужно запустить al oop один за другим (асин c) внутри событие. Это l oop взаимодействует с базой данных и занимает некоторое время, чтобы быть законченным. Я приложил все усилия с помощью генератора событий и setImmediate (), но все еще получаю функции processMessage и storeMessage syn c. Пожалуйста, посмотрите:
const EventEmitter = require('events')
const emitter = new EventEmitter()
msg.once('body', stream => {
emitter.on('done',() => {
try {
setImmediate(async ()=>{ // <-- Here I'm trying to queue async the funtion
await emailService.processMessage(stream);
})
} catch(err) {
helper.logger.error('Problem stockpiling mails to be processed');
}
});
});
Затем я вызываю это, когда MSG закончил
f.once('end', function() {
emitter.emit('done');
});
Я не знаю, находится ли проблема внутри функции, которую я вызываю в setImmediate, так Я оставлю их ниже.
exports.processMessage = async (stream) => {
/// ...
await storeMessage(parsed);
/// ...
}
async function storeMessage (parsed){
// Some async database interaction
}