я бы так сделал:
let tasks = Promise.resolve();
socket.on('something', data => {
tasks = tasks.then(async () => {
//тут много логики, но суть такова:
//запрос в бд и файл, обработка и на основе полученных данных запись
//не допускать последующих событий, пока данные не запишутся
}).catch(e => {
// обработка ошибок, чтоб процесс не прерывался
});
});
Естественно, если нужна синхронизация еще и между потоками, то не спасет, только в пределах 1 процесса
если все же многопоточность нужна, то:
1. складываем наши задачи в очередь в redis (RPUSH)
2. разбираем задачи процессами воркерами по одной (LPOP)